android生命周期深入分析(一)
更新時(shí)間:2012年12月06日 08:58:12 作者:
Android 程序的生命周期是由系統(tǒng)控制而非程序自身直接控制,本文將詳細(xì)介紹,需要的朋友可以參考下
Android 系統(tǒng)在Activity 生命周期中加入一些鉤子,我們可以在這些系統(tǒng)預(yù)留的鉤子中做一些事情。
例舉了 7 個(gè)常用的鉤子:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()
簡(jiǎn)要說(shuō)明:
onCreate(Bundle savedInstanceState):創(chuàng)建activity時(shí)調(diào)用。設(shè)置在該方法中http://www.myexception.cn/,還以Bundle中可以提出用于創(chuàng)建該 Activity 所需的信息。
onStart():activity變?yōu)樵谄聊簧蠈?duì)用戶可見(jiàn)時(shí),即獲得焦點(diǎn)時(shí),會(huì)調(diào)用。
onResume():activity開(kāi)始與用戶交互時(shí)調(diào)用(無(wú)論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法總是被調(diào)用的)。
onPause():activity被暫?;蚴栈豤pu和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的。。
onStop():activity被停止并轉(zhuǎn)為不可見(jiàn)階段及后續(xù)的生命周期事件時(shí),即失去焦點(diǎn)時(shí)調(diào)用。
onRestart():重新啟動(dòng)activity時(shí)調(diào)用。該活動(dòng)仍在棧中,java.io.UnsupportedEncodingException而不是啟動(dòng)新的活動(dòng)。
onDestroy():activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被調(diào)用可能是因?yàn)橛腥酥苯诱{(diào)用 finish()方法 或者系統(tǒng)決定停止該活動(dòng)以釋放資源。
橫豎屏切換
1 切換到橫屏
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
2 切換到豎屏,銷毀了兩次
onSaveInstanceState
onPause
onStop
onDestroyonCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
3 修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",切橫屏,只銷毀一次
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
4 再切回豎屏,發(fā)現(xiàn)不會(huì)再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onConfigurationChanged
5 更改 android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",切橫屏,就只打印onConfigChanged
onConfigurationChanged
6 切回豎屏
onConfigurationChanged
onConfigurationChanged
總結(jié):
1、不設(shè)置Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次
2、設(shè)置Activity的android:configChanges="orientation"時(shí),切屏還是會(huì)重新調(diào)用各個(gè)生命周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次
3、設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法
例舉了 7 個(gè)常用的鉤子:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()
簡(jiǎn)要說(shuō)明:
onCreate(Bundle savedInstanceState):創(chuàng)建activity時(shí)調(diào)用。設(shè)置在該方法中http://www.myexception.cn/,還以Bundle中可以提出用于創(chuàng)建該 Activity 所需的信息。
onStart():activity變?yōu)樵谄聊簧蠈?duì)用戶可見(jiàn)時(shí),即獲得焦點(diǎn)時(shí),會(huì)調(diào)用。
onResume():activity開(kāi)始與用戶交互時(shí)調(diào)用(無(wú)論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法總是被調(diào)用的)。
onPause():activity被暫?;蚴栈豤pu和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的。。
onStop():activity被停止并轉(zhuǎn)為不可見(jiàn)階段及后續(xù)的生命周期事件時(shí),即失去焦點(diǎn)時(shí)調(diào)用。
onRestart():重新啟動(dòng)activity時(shí)調(diào)用。該活動(dòng)仍在棧中,java.io.UnsupportedEncodingException而不是啟動(dòng)新的活動(dòng)。
onDestroy():activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被調(diào)用可能是因?yàn)橛腥酥苯诱{(diào)用 finish()方法 或者系統(tǒng)決定停止該活動(dòng)以釋放資源。
橫豎屏切換
1 切換到橫屏
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
2 切換到豎屏,銷毀了兩次
onSaveInstanceState
onPause
onStop
onDestroyonCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
3 修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",切橫屏,只銷毀一次
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
4 再切回豎屏,發(fā)現(xiàn)不會(huì)再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onConfigurationChanged
5 更改 android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",切橫屏,就只打印onConfigChanged
onConfigurationChanged
6 切回豎屏
onConfigurationChanged
onConfigurationChanged
總結(jié):
1、不設(shè)置Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次
2、設(shè)置Activity的android:configChanges="orientation"時(shí),切屏還是會(huì)重新調(diào)用各個(gè)生命周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次
3、設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法
相關(guān)文章
Android開(kāi)發(fā)MediaCodec和lamemp3多段音頻截取拼接
這篇文章主要為大家介紹了Android開(kāi)發(fā)使用MediaCodec和lamemp3實(shí)現(xiàn)多段音頻截取拼接的編程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Android中手機(jī)錄屏并轉(zhuǎn)換GIF的兩種方式
本文主要介紹了android中手機(jī)錄屏并轉(zhuǎn)換GIF的兩種方式,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
Kotlin新手基礎(chǔ)學(xué)習(xí)之Elvis操作符
Kotlin 是一種在 Java 虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語(yǔ)言,被稱之為 Android 世界的Swift,由 JetBrains 設(shè)計(jì)開(kāi)發(fā)并開(kāi)源,下面這篇文章主要給大家介紹了關(guān)于Kotlin新手基礎(chǔ)學(xué)習(xí)之Elvis操作符的相關(guān)資料,需要的朋友可以參考下。2017-12-12
Android自定義view之太極圖的實(shí)現(xiàn)教程
這篇文章主要給大家介紹了關(guān)于Android自定義view之太極圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Android實(shí)現(xiàn)字幕滾動(dòng)的方法
這篇文章主要介紹了Android實(shí)現(xiàn)字幕滾動(dòng)的方法,很實(shí)用的功能,需要的朋友可以參考下2014-07-07
36個(gè)Android開(kāi)發(fā)常用經(jīng)典代碼大全
本篇文章主要介紹了36個(gè)Android開(kāi)發(fā)常用經(jīng)典代碼片段,都是實(shí)用的代碼段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android webview用法實(shí)例簡(jiǎn)析
這篇文章主要介紹了Android webview用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Android中webview的功能、用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-01-01
Android Studio 3.6 調(diào)試 smali的全過(guò)程
這篇文章主要介紹了Android Studio 3.6 調(diào)試 smali, 目前最新版的 Android Studio 利用附加功能調(diào)試 smali 非常方便,具體操作步驟跟隨小編一起看看吧2020-02-02
Android編程設(shè)定activity進(jìn)入和退出效果的方法
這篇文章主要介紹了Android編程設(shè)定activity進(jìn)入和退出效果的方法,簡(jiǎn)單分析了Android Activity進(jìn)入與退出效果的實(shí)現(xiàn)原理及相關(guān)屬性設(shè)置技巧,需要的朋友可以參考下2017-07-07

