故事講解Activity生命周期(貓的一生)
大家好,關(guān)于Android中Activity的生命周期,網(wǎng)上大多數(shù)文章基本都是直接貼圖、翻譯API,比較籠統(tǒng)含糊不清。

我就用故事來(lái)說(shuō)一說(shuō):
有個(gè)人叫User,TA養(yǎng)了幾只貓,有只貓叫Activity。User見(jiàn)證了Activity貓的一生。

User覺(jué)得和Activity一起的時(shí)間差不多夠了,就(打開(kāi)新的Activity)把它關(guān)進(jìn)籠子,和其它貓一邊玩去了(Another activity comes into the foreground)。
Activity就開(kāi)始閉目養(yǎng)神(onPause)...
過(guò)了一會(huì)兒,主人打開(kāi)籠子,呼喚它的名字(User returns to the activity),它聽(tīng)到后馬上睜開(kāi)眼(onResume)跑過(guò)去和主人玩耍(Activity running)...
后來(lái)主人又把它關(guān)起來(lái)然后走了,Activity繼續(xù)閉目養(yǎng)神(onPause)...
再后來(lái)主人把燈關(guān)了(The activity is no longer visible),Activity感覺(jué)天黑了就睡了(onStop)...
不知道什么時(shí)候,主人又回來(lái)了,一邊敲籠子、一邊叫著Activity的名字(User navigates to the activity),
Activity被從美夢(mèng)中拉回了現(xiàn)實(shí)世界,恢復(fù)了狀態(tài)(onRestart),然后醒來(lái)(onStart)睜開(kāi)眼(onResume)...
就這樣不知不覺(jué)過(guò)了很久...
有一次主人(按下主頁(yè)、多任務(wù)或電源按鈕)出遠(yuǎn)門了,好久沒(méi)回來(lái),家里的食物不夠,很快就被大家吃光了(Apps with higher priority need memory)。
由于Activity很弱小(優(yōu)先級(jí)低)、還被關(guān)在籠子里(沒(méi)有綁定前臺(tái)Service),所以吃到的食物很少。
幾頓饑渴后大家都餓昏了,紛紛進(jìn)入休克狀態(tài)(App process killed)。
主人回來(lái)時(shí)看到可憐的Activity一動(dòng)不動(dòng)地躺著,怎么都叫不醒,就趕緊送去獸醫(yī)院搶救(User navigates to the activity)。
它醒來(lái)(onStart)睜開(kāi)眼(onResume),和主人打打鬧鬧(Activity running),過(guò)了一會(huì)兒主人就帶著它回家了...
俗話說(shuō),大難不死必有后福,之后主人確實(shí)對(duì)Activity照顧有加。
可是天有不測(cè)風(fēng)云,有一天Activity被一個(gè)壞蛋弄死了(The activity is destroyed by the system)。
Activity死了(onDestroy),User很傷心地把它埋了(Activity shut down)...
User很留戀和Activity在一起的時(shí)光,心有不甘,于是重新要了一只小貓,名字仍然叫Activity...
Activity一天天長(zhǎng)大,主人對(duì)它非常寵愛(ài),但它卻越來(lái)越叛逆。
終于有一天,主人受夠了,覺(jué)得Activity實(shí)在太可惡(或者沒(méi)有利用價(jià)值)就(點(diǎn)擊返回按鈕)把它拋棄了(The activity is finished)...
Activity不適應(yīng)外部惡劣的環(huán)境很快就死了(onDestroy),大自然用風(fēng)和泥土把它埋葬(Activity shut down)...
這就是Activity貓的一生。
ZBLibrary提供了isAlive()、isRunning()等判斷Activity、Fragment生命周期狀態(tài)的方法;
以及runUiThread(Runnable runnable)方法來(lái)避免直接runOnUiThread(Runnable runnable)導(dǎo)致在onDestroy后運(yùn)行崩潰;
還有線程管理類ThreadManager,BaseActivity、BaseFragment內(nèi)可以runThread(String tag, Runnable runnable)很方便地新開(kāi)線程,
onDestroy后自動(dòng)釋放,不用擔(dān)心直接new Thread(runnable).start()在onDestroy后還在運(yùn)行浪費(fèi)資源,甚至使用被回收的變量導(dǎo)致崩潰等問(wèn)題。
ZBLibrary-Android快速開(kāi)發(fā)框架

下載試用
下載地址(覺(jué)得不錯(cuò)就Star支持下吧^_^)
?https://github.com/TommyLemon/Android-ZBLibrary
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
Android中隱藏標(biāo)題欄和狀態(tài)欄的方法
Android中隱藏標(biāo)題欄和狀態(tài)欄的方法,需要的朋友可以參考一下2013-05-05
Android SQLite3多線程操作問(wèn)題研究總結(jié)
這篇文章主要介紹了Android SQLite3多線程操作問(wèn)題研究總結(jié),本文總結(jié)了SQLite3是否支持多線程、SQLiteDatabase的同步鎖、多線程讀數(shù)據(jù)庫(kù)等問(wèn)題,需要的朋友可以參考下2015-03-03
Android游戲開(kāi)發(fā)學(xué)習(xí)之引擎用法實(shí)例詳解
這篇文章主要介紹了Android游戲開(kāi)發(fā)學(xué)習(xí)之引擎用法,較為詳細(xì)的分析了Android游戲開(kāi)發(fā)中所常用的JBox2D引擎功能及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android中ActionBar以及menu的代碼設(shè)置樣式
這篇文章主要介紹了Android中ActionBar以及menu的代碼設(shè)置樣式的相關(guān)資料,需要的朋友可以參考下2015-07-07
Android自定義TextView實(shí)現(xiàn)文字圖片居中顯示的方法
下面小編就為大家分享一篇Android自定義TextView實(shí)現(xiàn)文字圖片居中顯示的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Android開(kāi)發(fā)之超實(shí)用的系統(tǒng)管理工具類【SD卡,網(wǎng)絡(luò),uri,屏幕,網(wǎng)絡(luò),軟鍵盤,文本,進(jìn)程等】
這篇文章主要介紹了Android開(kāi)發(fā)之超實(shí)用的系統(tǒng)管理工具類,涉及Android針對(duì)SD卡,網(wǎng)絡(luò),uri,屏幕,網(wǎng)絡(luò),軟鍵盤,文本,進(jìn)程等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
android當(dāng)前apn的狀態(tài)以及獲取方法
在絕大多數(shù)android機(jī)器etc路徑下存放一個(gè)的apns-conf.xml文件,表示當(dāng)前機(jī)器使用的apn信息通過(guò)root機(jī)器可以push出來(lái)看看,具體路徑可以上網(wǎng)搜下,接下來(lái)介紹獲取apn的狀態(tài)的方法2013-01-01
實(shí)例詳解android studio如何導(dǎo)入.so文件的方法
通過(guò)實(shí)例給大家詳細(xì)講解了如何在android studio如何導(dǎo)入.so文件以及中間遇到的問(wèn)題解決辦法,需要的讀者們可以仔細(xì)學(xué)習(xí)一下。2017-12-12
ViewPager頂部導(dǎo)航欄聯(lián)動(dòng)效果(標(biāo)題欄條目多)
這篇文章主要介紹了ViewPager頂部導(dǎo)航欄聯(lián)動(dòng)效果,代碼簡(jiǎn)單易懂,感興趣的朋友參考下吧2016-08-08

