Android Activity 生命周期和重要的相关函数(基础一)
總結: 1.oncreate 2.onstart ? ? ? ? ? ?可見但不交互 3.onrestart ? ? ? ? 從其他界面重新調轉過來 4.onresume ? ? ? 可交互 5.onpase 6.onstop ? ? ? ? ? ?不可見 7.ondestroy
BACK鍵:
當我們按BACK鍵時,我們這個應用程序將結束,這時候我們將先后調用onPause()->onStop()->onDestory()三個方法,如下圖所示:
HOME鍵:
當我們打開應用程序時,比如瀏覽器,我正在瀏覽NBA新聞,看到一半時,我突然想聽歌,這時候我們會選擇按HOME鍵,然后去打開音樂應用程序,
而當我們按HOME的時候,Activity先后執行了onPause()->onStop()這兩個方法,這時候應用程序并沒有銷毀。如下圖所示:
而當我們再次啟動ActivityDemo應用程序時,則先后分別執行了onRestart()->onStart()->onResume()三個方法,如下圖所示:
1.OnstartActivityResult
2. onnewintent
3. onSaveInstanceState
4.onconfigChange
5.setTheme
onStart是可見,但并不可交互的,onResume才可交互的,這也是onStart(可見)和onResume(可見且可交互,在前臺了)的區別
場景:
在實際應用場景中,假設A Activity位于棧頂,此時用戶操作,從A Activity跳轉到B Activity。那么對AB來說,具體會回調哪些生命周期中的方法呢?回調方法的具體回調順序又是怎么樣的呢?
開始時,A被實例化,執行的回調有A:onCreate -> A:onStart -> A:onResume。
當用戶點擊A中按鈕來到B時,假設B全部遮擋住了A,將依次執行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。
此時如果點擊Back鍵,將依次執行B:onPause -> A:onRestart?-> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。
至此,Activity棧中只有A。在Android中,有兩個按鍵在影響Activity生命周期這塊需要格外區分下,即Back鍵和Home鍵。我們先直接看下實驗結果:
此時如果按下Back鍵,系統返回到桌面,并依次執行A:onPause -> A:onStop -> A:onDestroy。
此時如果按下Home鍵(非長按),系統返回到桌面,并依次執行A:onPause -> A:onStop。由此可見,Back鍵和Home鍵主要區別在于是否會執行onDestroy。
? ? ?在之前的項目開發過程中,當時遇到一個很奇怪的問題: 手機上的“開發者選項”中有一個“不保留活動”的設置,當開啟此設置,手機上的設置提示是“用戶離開后即銷毀每個活動” ,開啟后,對于其他的應用程序是從A Acticity到B Activity,然后Back鍵回到A,此時,其他應用程序只是先白屏(有可能黑屏等,取決于主題設置)一下,然后A開始可見,但是我的應用程序中出現的一個結果卻是直接返回到了桌面。一開始百思不得其解。最后終于定位出問題。首先,我們需要明確開啟此設置項后對Activity生命周期的影響。 開啟此設置項后,當A到B時,假設B全部遮擋住了A,將依次執行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop -> A:onDestroy。是的,A在系統原本的生命周期回調中增加了onDestroy。此即“用戶離開后即銷毀每個活動”的含義。但此時需要注意的是,只要沒有認為的調用A的finish()方法,雖然A執行了onDestroy,但Activity棧中依然保留有A,此時B處于棧頂。那么在B中按Back鍵回到A時,將依次執行:B:onPause -> A:onCreate -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。沒錯,A從onCreate開始執行了。此處也就解釋了為什么A可能會出現白屏(或黑屏等)一下的原因了。
這樣的結果:開啟“不保留活動設置” ,back鍵或者不可見或者home,都執行Ondestroy方法,但是棧沒有被移除!
如果需要移除可以執行:
AppManager.getAppManager().finishActivity(this); 1 /** 2 * 結束指定的Activity 3 */ 4 public void finishActivity(Activity activity) { 5 if (activity != null) { 6 activityStack.remove(activity); 7 activity.finish(); 8 activity = null; 9 } 10 }
總結
以上是生活随笔為你收集整理的Android Activity 生命周期和重要的相关函数(基础一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LikeLib:区块链+云计算的结合技术
- 下一篇: Android7.0以上如何获取头像(拍