安卓四大組件之Activity

  • Activity介紹
  • Activity基本用法
  • Activity數(shù)據(jù)傳遞
  • Activity生命周期
  • Activity啟動模式

Activity介紹

它是一種可以包含用戶可視化界面的組件,主要用于和用戶進行交互呀打。一個應用程序可以包含零個或多個活動,在每個Activity中都可以放很多視圖控件矮烹,所以可以把Activity看作控件的容器洲炊。

Activity基本用法

1.一個Activity就是一個類拟淮,創(chuàng)建Activity時需要繼承Activity捕透。
2.需要復寫onCreate方法菇爪,添加界面視圖xml填充至Activity中唠梨。如setContentView
3.因為Activity是應用程序的組件袋励,需要在AndroidMainfest.xml(應用程序清單)里面注冊。

Activity數(shù)據(jù)傳遞

  • 顯式傳遞
    需要通過傳遞對象 意圖Intent
  1. 呼起MainActivity2界面
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent);
  1. 傳遞數(shù)據(jù)
 Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "hj");
intent.putExtras(bundle);
startActivity(intent);
//接收數(shù)據(jù)
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
  • 隱式傳遞
    需要根據(jù)Activity的action和category來進行匹配
<intent-filter>
  <action android:name="android.hj" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Intent intent = new Intent("android.hj");
intent.addCategory(intent.CATEGORY_DEFAULT);
startActivity(intent);

具體解釋下隱式傳遞Filter的匹配規(guī)則
為了匹配過濾列表姻成,需要同時匹配過濾列表中的action插龄、category、data信息科展,否則匹配失敗均牢。
1.action匹配規(guī)則
一個過濾規(guī)則中可以有多個action,只要Intent中任意一個action能夠和過濾規(guī)則中的任何一個action相同即可匹配成功才睹。需要注意的是action是區(qū)分大小寫的
2.category匹配規(guī)則
category的匹配規(guī)則和action的匹配規(guī)則不同徘跪,Intent中可以沒有category,這個Intent仍能匹配成功琅攘。category要求Intent中每個category都要和過濾規(guī)則中的任何一個category相同即可匹配成功垮庐。系統(tǒng)在調用startActivity或startActivityForResult的時候會默認為Intent加上“android.intent.category.DEFAULT”這個category。同時為了讓activity能夠接收隱式調用坞琴,必須在intent-filter中指定“android.intent.category.DEFAULT”這個category
3.data匹配規(guī)則
如果過濾規(guī)則中定義了data哨查,那么Intent中必須也要定義可匹配的data,匹配任意一個就行剧辐。
data是由mimeType和URI組成寒亥。mimeType指媒體類型,比如image/jpeg荧关、audio/mpeg4-generic和video/*等溉奕,可以表示圖片、文本忍啤、視頻等不同的媒體格式加勤,而URI的結構:

<scheme>://<host>:<port>/[path]|<pathPrefix>|<[pathPattern>]
//具體例子
http://www.baidu.com:80/search/info
intent.setDataAndType(Uri.parse("file://abc"), "image/png");

URI默認值為content和file。
最后我們在通過隱式傳遞一個Activity時候同波,需要做一下判斷是否能匹配鳄梅,不然會報錯。判斷方法有兩種:采用packageManager的resolveActivity方法或者Intent的resolveActivity方法未檩,如果找不到匹配的Activity就會返回null

  • 數(shù)據(jù)回傳
    A->B

A##

通過startActivityForResult方法得到Activity的回傳值卫枝。
1.startActivityForResult(intnet, requestCode);
2.onActivityResult(requestCode, resultCode, data);

B##

通過setResult(resultCode, intent)回傳數(shù)據(jù)給A

requestCode和resultCode可以控制需要傳遞和回傳的Activity對象

Activity生命周期

掌握活動的生命周期對任何Android開發(fā)者來說都非常重要,當你深入理解活動的生命周期后讹挎,就可以寫出更流暢的程序校赤,提高用戶體驗吆玖。

  • 返回棧
    我們每啟動一個新的活動,就會覆蓋在原活動之上马篮,然后點擊back鍵會銷毀最上面的活動沾乘。Android是使用任務來管理活動的,一個任務就是一組存放在棧里的活動的集合浑测,這個棧稱之為返回棧翅阵。在默認情況下,每當我們啟動一個新的活動迁央,它會在返回棧中入棧掷匠,并處在棧頂?shù)奈恢谩6慨斘覀儼聪耣ack或finish方法去銷毀一個活動時岖圈,處在棧頂?shù)幕顒訒鰲讹语!?/li>
Paste_Image.png
  • 生命周期
    生命周期如下圖:
Paste_Image.png

1.啟動Activity:onCreate->onStart->onResume,進入運行狀態(tài)
2.當前Activity被其他Activity覆蓋或被鎖屏:onPause蜂科,暫停當前Activity的執(zhí)行
3.當前Activity由被覆蓋回到前臺或解鎖屏:onResume顽决,再次進入運行狀態(tài)
4.當前Activity跳轉到新Activity或按Home鍵回到主屏,自身退居后臺:onPause->onStop進入停滯狀態(tài)

5.用戶退回到此Activity:onRestart->onStart->onResume导匣,再次進入運行狀態(tài)
6.當前Activity處于被覆蓋狀態(tài)或者后臺不可見狀態(tài)才菠,即第2步和第4步,系統(tǒng)內(nèi)存不足贡定,殺死當前Activity赋访,而后用戶退回當前Activity:再次onCreate->onStart->onResume,進入運行狀態(tài)
7.用戶退出當前Activity:onPause->onStop->onDestory缓待,結束當前Activity

  • 啟動模式
    Activity有4種啟動模式:standard蚓耽、singleTop、singleTask命斧、singleInstance
    1)standard模式:
    默認啟動模式,如果有3個活動嘱兼,如果從act1啟動到act2国葬,再啟動到act3,那么任務棧分別是act1芹壕、act2汇四、act3,act3在棧頂踢涌,如果此時按手機返回鍵通孽,需要返回3次才能回到桌面,任務分會銷毀act3睁壁、act2背苦、act1互捌。
Paste_Image.png

2)singleTop模式:
如果棧頂?shù)脑厥且患せ畹牡慕M件,那么不會創(chuàng)建新的Activity放在任務棧行剂,而是會復用棧頂?shù)腁ctivity秕噪;如果發(fā)現(xiàn)棧頂?shù)脑夭皇且せ畹腁ctivity,就會新建新的Activity放置到任務棧里面厚宰。

Paste_Image.png

3)singleTask模式:
一般和singleTop模式類似腌巾,如果發(fā)現(xiàn)任務棧里面已經(jīng)有了要啟動的Activity,就會清空這個Activity所在的任務棧上面的所有Activity铲觉,然后直接復用這個已經(jīng)存在的Activity澈蝙。

Paste_Image.png

4)singleInstance模式:
會新開啟一個任務棧,跟其他普通Activity不是同一個任務棧撵幽,把要激活的Activity放置在新的任務棧里灯荧,這個任務棧里面有且只有一個實例。

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末并齐,一起剝皮案震驚了整個濱河市漏麦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌况褪,老刑警劉巖撕贞,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異测垛,居然都是意外死亡捏膨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門食侮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來号涯,“玉大人,你說我怎么就攤上這事锯七×纯欤” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵眉尸,是天一觀的道長域蜗。 經(jīng)常有香客問我,道長噪猾,這世上最難降的妖魔是什么霉祸? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮袱蜡,結果婚禮上丝蹭,老公的妹妹穿的比我還像新娘。我一直安慰自己坪蚁,他們只是感情好奔穿,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布镜沽。 她就那樣靜靜地躺著,像睡著了一般巫橄。 火紅的嫁衣襯著肌膚如雪淘邻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天湘换,我揣著相機與錄音宾舅,去河邊找鬼。 笑死彩倚,一個胖子當著我的面吹牛筹我,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帆离,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蔬蕊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哥谷?” 一聲冷哼從身側響起岸夯,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎们妥,沒想到半個月后猜扮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡监婶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年旅赢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惑惶。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡煮盼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出带污,到底是詐尸還是另有隱情僵控,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布鱼冀,位于F島的核電站报破,受9級特大地震影響,放射性物質發(fā)生泄漏雷绢。R本人自食惡果不足惜泛烙,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一理卑、第九天 我趴在偏房一處隱蔽的房頂上張望翘紊。 院中可真熱鬧,春花似錦藐唠、人聲如沸帆疟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踪宠。三九已至自赔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柳琢,已是汗流浹背绍妨。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柬脸,地道東北人他去。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像倒堕,于是被迫代替她去往敵國和親灾测。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容