Activity的基本理解

?Activity:是Android的四大組件之一,主要處理界面的顯示相關(guān)。


Activity的生命周期:

來(lái)自:http://blog.csdn.net/liuhe688/article/details/6733407

onCreat():在Activity創(chuàng)建的時(shí)候執(zhí)行,接受參數(shù)Bundle savedInstanceState,一般用于初始化數(shù)據(jù)。(savedInstanceState參數(shù)說(shuō)明:主要用于當(dāng)Activity被異常殺死的時(shí)候狱从,用于保存數(shù)據(jù));

onStart():在Activity由不可見(jiàn)變?yōu)榭梢?jiàn)的時(shí)候調(diào)用叠纹,一般不進(jìn)行任何操作季研;

onResume():Activity變成可見(jiàn),獲得焦點(diǎn)與用戶進(jìn)行交流誉察,前臺(tái)狀態(tài)训貌。

onPause():Activity可見(jiàn),但是沒(méi)有獲得焦點(diǎn)冒窍,屬于暫停狀態(tài)递沪,不處于棧頂當(dāng)時(shí)可以看見(jiàn)界面;

onStop():Activity變成完全不可間的時(shí)候調(diào)用综液,進(jìn)入后臺(tái)狀態(tài)款慨;一般可以釋放一些消耗資源的程序;

onDestory ():Activity被銷毀的時(shí)候調(diào)用谬莹;


圖中具有三個(gè)向上的流程進(jìn)行一一說(shuō)明:

第一條 ?onStop()——onRestart()——onStart();

當(dāng)Aacitvity沒(méi)有被回收檩奠,不可見(jiàn),或則說(shuō)沒(méi)有處于棧頂時(shí)附帽,被再次啟動(dòng)的時(shí)候就會(huì)執(zhí)行第一條流程埠戳。

第二條 onPause()——onResume()

Activity由失去焦點(diǎn)狀態(tài)進(jìn)入獲得焦點(diǎn)狀態(tài)(AlderDialog消失的時(shí)候會(huì)進(jìn)行第二條流程)

第三條 onStop()——onCreat();

Activity當(dāng)處于后的時(shí)候,被系統(tǒng)意外回收時(shí)會(huì)進(jìn)行第三條流程蕉扮;

在系統(tǒng)回收之前會(huì)調(diào)用onSaveInstanceState();保存示例狀態(tài)整胃;在onCreat()時(shí)候調(diào)用onRestartInstanceState(BundlesavedInstanceState)

onSaveInstanceState()執(zhí)行時(shí)機(jī):調(diào)用遵循一個(gè)重要原則,即當(dāng)系統(tǒng)“未經(jīng)你許可”時(shí)銷毀了你的activity喳钟,則onSaveInstanceState會(huì)被系統(tǒng)調(diào)用屁使,這是系統(tǒng)的責(zé)任在岂,因?yàn)樗仨氁峁┮粋€(gè)機(jī)會(huì)讓你保存你的數(shù)據(jù)(當(dāng)然你不保存那就隨便你了)。


如何銷毀一個(gè)Acitvity蛮寂?

直接調(diào)用finish()方法,進(jìn)行銷毀蔽午。

會(huì)執(zhí)行的生命周期:onPause(),onStop(),onDestory().


BaseActivity的說(shuō)明:一般在開(kāi)發(fā)中,所有的Activity都不會(huì)直接繼承自Activity酬蹋,而是繼承自BaseActivity及老,而B(niǎo)aseActivity繼承自Activity;可以在BaseActivity中寫(xiě)一些接口范抓,動(dòng)態(tài)權(quán)限的添加写半,沉浸狀態(tài)欄等;


Activity的啟動(dòng)模式:詳細(xì)見(jiàn)網(wǎng)址:http://blog.csdn.net/guolin_blog/article/details/41087993

首先是啟動(dòng)模式的設(shè)置:可以manifest清單文件中通過(guò)launchModel來(lái)設(shè)置尉咕,也可以通過(guò)Intent ? ? ? 中添加flag來(lái)完成啟動(dòng)模式的設(shè)置。當(dāng)兩種模式都設(shè)置了啟動(dòng)模式限制璃岳,Intent的更優(yōu)先(廣播機(jī)制中也是動(dòng)態(tài)注冊(cè)廣播優(yōu)先于靜態(tài)注冊(cè)的廣播)年缎;

? ? ? ? 在具體說(shuō)明啟動(dòng)模式的時(shí)候,先說(shuō)以下铃慷,系統(tǒng)管理Activity的管理基本過(guò)程单芜,系統(tǒng)通過(guò)返回站的模式管理,是一種先進(jìn)后出的模式犁柜。

在manifest文件中進(jìn)行模式設(shè)置:


standard:默認(rèn)啟動(dòng)模式

當(dāng)我們沒(méi)有在清單文件中設(shè)置Activity的啟動(dòng)模式的時(shí)候洲鸠,我們采用的就是這種啟動(dòng)模式;

這總模式是指馋缅,當(dāng)我們啟動(dòng)設(shè)置這個(gè)模式的Activity扒腕,就會(huì)新建一個(gè)Activity實(shí)例,并切放置在棧頂萤悴。

singleTop:棧頂唯一

當(dāng)我們啟動(dòng)Activity的時(shí)候首先會(huì)進(jìn)行判斷瘾腰,該activity是否位于站定,如果位于站定覆履,則不創(chuàng)建新的Acitvity蹋盆,如果不位于棧頂,則創(chuàng)建新的實(shí)例硝全,并放入到棧頂栖雾;

singleTask:任務(wù)唯一

啟動(dòng)自身Activity的情況:當(dāng)啟動(dòng)自身Activity的時(shí)候,就會(huì)先判斷任務(wù)棧是否具有當(dāng)前Activity伟众,如果沒(méi)有新創(chuàng)建析藕,并至于棧頂。如果具有該Activity凳厢,就會(huì)將該Activity之前所有的Activity出棧噪径,將改Activity至于棧頂柱恤。

啟動(dòng)其他應(yīng)用的Activity:當(dāng)啟動(dòng)他應(yīng)用設(shè)置singleTask的Activity的時(shí)候,就會(huì)新啟動(dòng)一個(gè)任務(wù)找爱,并將其放到棧頂梗顺;

singleInstance:?jiǎn)螌?shí)例

啟動(dòng)的Activity會(huì)新建一個(gè)任務(wù),并且這個(gè)任務(wù)中只有這一個(gè)Activity车摄,當(dāng)這個(gè)Activity啟動(dòng)其他Activity的時(shí)候會(huì)放在其他任務(wù)中寺谤。

Intent的啟動(dòng)模式說(shuō)明:?吮播?


Activity的沉浸模式:http://blog.csdn.net/guolin_blog/article/details/51763825

幾種功能:首先隱藏或則透明狀態(tài)欄变屁,隱藏或則透明導(dǎo)航欄,真正的沉浸式模式意狠。


Intent:在Activty粟关,Service,Broadcast之間都有使用环戈。

Intent在Activity之間的使用:分為顯示Intent與隱式Intent兩種闷板;

首先說(shuō)的顯示Intent的使用方法:

Intent ?intent=new Intent(MainActivity.this,SecondClass.class);

//參數(shù)說(shuō)明:第一個(gè)參數(shù)為上下問(wèn)對(duì)象(context),當(dāng)然也可以是其子類院塞;

//第二個(gè)參數(shù)為想要啟動(dòng)的目標(biāo)活動(dòng)

startActivity(intent);

//啟動(dòng)相應(yīng)意圖遮晚,完成跳轉(zhuǎn)


隱式意圖:隱式意圖比顯示意圖含蓄的多;

不明確指出我們要啟動(dòng)哪一個(gè)活動(dòng)拦止,而是指定了一系列更為抽象的action與category等信息县遣,然后交給系統(tǒng)去分析,并啟動(dòng)相應(yīng)的activity汹族;

基本行動(dòng)原理解析:當(dāng)在新建Intent的時(shí)候會(huì)指定action與category萧求;action在每個(gè)Intent中只能有一個(gè),而category可以又多個(gè)(當(dāng)寫(xiě)的時(shí)候?yàn)槟J(rèn)android.intent.category.DEFAULT);在AndroidManifest中activty中添加<intent-filter>標(biāo)簽顶瞒,在intent-filter中添加action與category饭聚;只又intent中的action與category同時(shí)與intent-filter中的action與category匹配的時(shí)候,這個(gè)活動(dòng)就會(huì)相應(yīng)搁拙;

代碼示例:

//發(fā)送隱士意圖

Intent intent=new Intent("com.this.action");

//采用構(gòu)造方法添加action

intent.addCategory("com.this.category");

//通過(guò)addCategory添加category秒梳,如果不添加也會(huì)又默認(rèn)的category;

startActivity(intent);

//接受隱式意圖的Activity

需要在AndroidManifest中添加intent-filter

<activty ?android :name=".SecondActivity">

<intent-filter>

<action android:name="com.this.action"/>

<category android:name="com.this.category"/>

</intent-filter>

</activity>

隱式意圖的其他使用方法:可以用于開(kāi)啟其他應(yīng)用的activity箕速。

(當(dāng)我們用系統(tǒng)的瀏覽器酪碘,或則打電話,或則分享到微信盐茎,都是啟動(dòng)其他應(yīng)用的activity)

舉例說(shuō)明:?jiǎn)?dòng)系統(tǒng)瀏覽器

Intent ? intent=new ?Intent("Intent.ACTION_VIEW")兴垦;

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

關(guān)于setData()方法說(shuō)明:

在intent-filter標(biāo)簽中有個(gè)類似與category的標(biāo)簽<data>,

<data>用于指定當(dāng)前活動(dòng)能夠響應(yīng)什么數(shù)據(jù)。

<data>配置具體內(nèi)容:

android.scheme-用于指定數(shù)據(jù)的協(xié)議部分,例如http協(xié)議探越;

android.host--用于指定數(shù)據(jù)的主機(jī)部分狡赐,如上例中的wwwbaidu.com.

android.port--用于指定端口號(hào);

android.path--用于指定端口好后的部分

android.mineType--指定可以處理的數(shù)據(jù)類型钦幔;

只有<data>標(biāo)簽中指定的內(nèi)容和Intent中攜帶的Data完全一致時(shí)枕屉,當(dāng)前活動(dòng)才能夠相應(yīng)該Intent。(不過(guò)一般Intent不會(huì)指定過(guò)多內(nèi)容鲤氢,瀏覽器只指定了協(xié)議)

代碼示例:

Intent? intent=new? Intent("Intent.ACTION_VIEW")搀擂;

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

<intent-filter>

<action android:name="android.intent.action.View"/>

<category android:name="android.intent.category.DEFAULT">

<data android: scheme="http">

</intent-filter>

只有action category data ?同時(shí)匹配時(shí)候,才會(huì)啟動(dòng)相應(yīng)的activity卷玉;


向下一個(gè)活動(dòng)傳遞數(shù)據(jù):Intent不但可以啟動(dòng)其他活動(dòng)哨颂,也可以向下一個(gè)活動(dòng)傳遞數(shù)據(jù),也可以將數(shù)據(jù)返回到上一個(gè)相种。

intent提供了一系列的putExtra()方法的重載威恼,可以把我們要傳遞的數(shù)據(jù)存在Intent中,啟動(dòng)另一活動(dòng)的時(shí)候寝并,只需要把這些數(shù)據(jù)再?gòu)腎ntent中取出來(lái)箫措。

代碼示例:

發(fā)送示例:

String data="Hello SecondActivity";

Intent ?intent=new Intent(FirstActivity.this,SecondActivity.class);

//通過(guò)鍵值對(duì)的方式進(jìn)行數(shù)據(jù)存儲(chǔ),前方是鍵食茎,用于取出數(shù)據(jù)的時(shí)候使用,后面的參數(shù)為具體數(shù)值馏谨;

intent.putExtra("extra_data",data);

startActivity(intent);

接受示例:

Intent intent=getIntent();

String data=intent.getStringExtra("extra_data");


返回參數(shù)給上一個(gè)活動(dòng):

啟動(dòng)Activity中

startActivityForResult()方法接受兩個(gè)參數(shù)别渔,第一個(gè)參數(shù)還是Intent,第二個(gè)參數(shù)是請(qǐng)求碼惧互,用于相應(yīng)后判斷數(shù)據(jù)來(lái)源哎媚。

Intent? intent=new Intent(MainActivity.this,SecondClass.class);

startActivityForResult(intent,1);

被啟動(dòng)的activity中,需要寫(xiě)入setResult(),該方法具有兩個(gè)參數(shù):第一個(gè)參數(shù)用于想上一個(gè)活動(dòng)返回處理結(jié)果喊儡,一般只使用RESULT_OK或則RESULT_CANCELED這兩個(gè)值拨与,第二個(gè)參數(shù)為Intent-只用于傳遞數(shù)據(jù)

Intent? intent=new Intent();

intent.putEXtra("data","back_1");

setReuslt(RESULT_OK,intent);

finish();

啟動(dòng)Activity中

從寫(xiě)onActivityReuslt(),一共接受3個(gè)參數(shù)艾猜,第一個(gè)參數(shù)為requestCode請(qǐng)求碼买喧,在startActivityForResult();中的第二個(gè)參數(shù),第二個(gè)resultCOde匆赃,即我們setResult()中返回?cái)?shù)據(jù)結(jié)果淤毛。第三個(gè)為setResult()的第二個(gè)參數(shù),也是返回的數(shù)據(jù)結(jié)果載體算柳;

一般在onActivityReuslt()中通過(guò)requestCode判斷是哪個(gè)Activity返回的數(shù)據(jù)低淡,然后通過(guò)resultCode判斷值的來(lái)源判斷處理結(jié)果是否成功,進(jìn)行相應(yīng)處理;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔗蹋,一起剝皮案震驚了整個(gè)濱河市何荚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猪杭,老刑警劉巖餐塘,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胁孙,居然都是意外死亡唠倦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涮较,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稠鼻,“玉大人,你說(shuō)我怎么就攤上這事狂票『虺荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵闺属,是天一觀的道長(zhǎng)慌盯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)掂器,這世上最難降的妖魔是什么亚皂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮国瓮,結(jié)果婚禮上灭必,老公的妹妹穿的比我還像新娘。我一直安慰自己乃摹,他們只是感情好禁漓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著孵睬,像睡著了一般播歼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掰读,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天秘狞,我揣著相機(jī)與錄音,去河邊找鬼蹈集。 笑死谒撼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雾狈。 我是一名探鬼主播廓潜,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辩蛋?” 一聲冷哼從身側(cè)響起呻畸,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悼院,沒(méi)想到半個(gè)月后伤为,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡据途,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绞愚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颖医。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡位衩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出熔萧,到底是詐尸還是另有隱情糖驴,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布佛致,位于F島的核電站贮缕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏俺榆。R本人自食惡果不足惜感昼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罐脊。 院中可真熱鬧定嗓,春花似錦、人聲如沸爹殊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梗夸。三九已至,卻和暖如春号醉,著一層夾襖步出監(jiān)牢的瞬間反症,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工畔派, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铅碍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓线椰,卻偏偏與公主長(zhǎng)得像胞谈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • Intent組件雖然不是四大組件烦绳,但卻是連接四大組件的橋梁卿捎,學(xué)習(xí)好這個(gè)知識(shí),也非常的重要径密。 一午阵、什么是Intent...
    困惑困惑困惑閱讀 1,510評(píng)論 0 0
  • Activity 一、四種形態(tài) 運(yùn)行狀態(tài): 當(dāng) Activity 處于棧的頂層享扔,可見(jiàn)底桂,并可與用戶進(jìn)行交互 onRe...
    任教主來(lái)也閱讀 1,653評(píng)論 1 10
  • 1.念劉備、關(guān)羽惧眠、張飛籽懦,雖然異姓,既結(jié)為兄弟锉试,則同心協(xié)力猫十,救困扶危;上報(bào)國(guó)家呆盖,下安黎庶拖云。不求同年同月同日生,只愿同...
    玄澤閱讀 1,246評(píng)論 0 3
  • RecyclerView 是Android L版本中新添加的一個(gè)用來(lái)取代ListView的SDK应又,它的靈活性與可替...
    洪生鵬閱讀 1,089評(píng)論 2 10