- 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
- 呼起MainActivity2界面
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent);
- 傳遞數(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>
- 生命周期
生命周期如下圖:
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互捌。
2)singleTop模式:
如果棧頂?shù)脑厥且患せ畹牡慕M件,那么不會創(chuàng)建新的Activity放在任務棧行剂,而是會復用棧頂?shù)腁ctivity秕噪;如果發(fā)現(xiàn)棧頂?shù)脑夭皇且せ畹腁ctivity,就會新建新的Activity放置到任務棧里面厚宰。
3)singleTask模式:
一般和singleTop模式類似腌巾,如果發(fā)現(xiàn)任務棧里面已經(jīng)有了要啟動的Activity,就會清空這個Activity所在的任務棧上面的所有Activity铲觉,然后直接復用這個已經(jīng)存在的Activity澈蝙。
4)singleInstance模式:
會新開啟一個任務棧,跟其他普通Activity不是同一個任務棧撵幽,把要激活的Activity放置在新的任務棧里灯荧,這個任務棧里面有且只有一個實例。