故事講解Activity生命周期(貓的一生)
大家好,關(guān)于Android中Activity的生命周期,網(wǎng)上大多數(shù)文章基本都是直接貼圖、翻譯API,比較籠統(tǒng)含糊不清。
我就用故事來說一說:
有個(gè)人叫User,TA養(yǎng)了幾只貓,有只貓叫Activity。User見證了Activity貓的一生。
User覺得和Activity一起的時(shí)間差不多夠了,就(打開新的Activity)把它關(guān)進(jìn)籠子,和其它貓一邊玩去了(Another activity comes into the foreground)。
Activity就開始閉目養(yǎng)神(onPause)...
過了一會(huì)兒,主人打開籠子,呼喚它的名字(User returns to the activity),它聽到后馬上睜開眼(onResume)跑過去和主人玩耍(Activity running)...
后來主人又把它關(guān)起來然后走了,Activity繼續(xù)閉目養(yǎng)神(onPause)...
再后來主人把燈關(guān)了(The activity is no longer visible),Activity感覺天黑了就睡了(onStop)...
不知道什么時(shí)候,主人又回來了,一邊敲籠子、一邊叫著Activity的名字(User navigates to the activity),
Activity被從美夢(mèng)中拉回了現(xiàn)實(shí)世界,恢復(fù)了狀態(tài)(onRestart),然后醒來(onStart)睜開眼(onResume)...
就這樣不知不覺過了很久...
有一次主人(按下主頁、多任務(wù)或電源按鈕)出遠(yuǎn)門了,好久沒回來,家里的食物不夠,很快就被大家吃光了(Apps with higher priority need memory)。
由于Activity很弱小(優(yōu)先級(jí)低)、還被關(guān)在籠子里(沒有綁定前臺(tái)Service),所以吃到的食物很少。
幾頓饑渴后大家都餓昏了,紛紛進(jìn)入休克狀態(tài)(App process killed)。
主人回來時(shí)看到可憐的Activity一動(dòng)不動(dòng)地躺著,怎么都叫不醒,就趕緊送去獸醫(yī)院搶救(User navigates to the activity)。
它醒來(onStart)睜開眼(onResume),和主人打打鬧鬧(Activity running),過了一會(huì)兒主人就帶著它回家了...
俗話說,大難不死必有后福,之后主人確實(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ì)它非常寵愛,但它卻越來越叛逆。
終于有一天,主人受夠了,覺得Activity實(shí)在太可惡(或者沒有利用價(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)方法來避免直接runOnUiThread(Runnable runnable)導(dǎo)致在onDestroy后運(yùn)行崩潰;
還有線程管理類ThreadManager,BaseActivity、BaseFragment內(nèi)可以runThread(String tag, Runnable runnable)很方便地新開線程,
onDestroy后自動(dòng)釋放,不用擔(dān)心直接new Thread(runnable).start()在onDestroy后還在運(yùn)行浪費(fèi)資源,甚至使用被回收的變量導(dǎo)致崩潰等問題。
ZBLibrary-Android快速開發(fā)框架
下載試用
下載地址(覺得不錯(cuò)就Star支持下吧^_^)
?https://github.com/TommyLemon/Android-ZBLibrary
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
Android 中RecyclerView通用適配器的實(shí)現(xiàn)
這篇文章主要介紹了Android 中RecyclerView通用適配器的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-03-03Android實(shí)現(xiàn)輪播圖無限循環(huán)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)輪播圖無限循環(huán)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android自定義控件實(shí)現(xiàn)九宮格解鎖
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)九宮格解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06解析Android中Animation動(dòng)畫的編寫要點(diǎn)
這篇文章主要介紹了Android中Animation動(dòng)畫的編寫要點(diǎn),講解了Animation的幾個(gè)常用標(biāo)簽的用法,需要的朋友可以參考下2016-04-04Android 判斷是開發(fā)debug模式,還是發(fā)布release模式的方法
下面小編就為大家?guī)硪黄狝ndroid 判斷是開發(fā)debug模式,還是發(fā)布release模式的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12Android App在ViewPager中使用Fragment的實(shí)例講解
這篇文章主要介紹了Android App在ViewPager中使用Fragment的實(shí)例講解,ViewPager組件主要被用來制作滑動(dòng)切換效果,需要的朋友可以參考下2016-03-03