當(dāng)單獨一個Activity啟動時,任何啟動模式~
onCreate()
在Activity創(chuàng)建時調(diào)用堤器,通常做一些初始化設(shè)置陋率。
這個方法只會被調(diào)用一次
↓
setContentView()
為Activity設(shè)置所要使用的布局文件
↓
onContentChanged()
在setContentView()執(zhí)行完成之后回調(diào)
↓
onStart()
當(dāng)Activity可見未獲得用戶焦點不能交互時系統(tǒng)會調(diào)用
↓
onPostCreate()
Activity徹底運行起來之后的回調(diào) - 通常用不到
↓
onResume()
當(dāng)Activity可見且獲得用戶焦點能交互時系統(tǒng)會調(diào)用
↓
onPostResume()
activity真正獲取焦點之后回調(diào),此方法在onResume()方法之后 - 通常用不到
↓
onAttachedToWindow()
在第一次調(diào)用onDraw前調(diào)用的吧兔,也就是我們寫的View在沒有繪制出來時調(diào)用的,但只會調(diào)用一次竭望。
↓
onCreateOptionsMenu();
onPrepareOptionsMenu();
onOptionsItemSelected();
onMenuOpened();
onOptionsMenuClosed();
與toolBar右側(cè)的菜單相關(guān)的方法
↓
onRestart()
當(dāng)Activity已經(jīng)停止然后重新被啟動時系統(tǒng)會調(diào)用
↓
onPause()
在當(dāng)前Activity被其他Activity覆蓋或鎖屏?xí)r調(diào)用
↓
onStop()
在Activity對用戶不可見時調(diào)用
↓
onDestroy()
在Activity銷毀時調(diào)用
↓
onDetachedFromWindow()
銷毀View的時候底瓣,這個View不再顯示,這個時候我們就可以在這個方法做一些收尾工作扭弧,如:取消廣播注冊阎姥,子線程等
onCreate和onStart之間有什么區(qū)別?
可見與不可見的區(qū)別鸽捻。前者不可見呼巴,后者可見。
onCreate方法只在Activity創(chuàng)建時執(zhí)行一次御蒲,而onStart方法在Activity中被多次調(diào)用衣赶。onCreate能做的事onStart其實都能做,但是onstart能做的事onCreate卻未必適合做厚满。如前文所說的府瞄,setContentView和資源初始化在兩者都能做,然而想動畫的初始化在onStart中做比較好碘箍。
onStart方法和onResume方法有什么區(qū)別遵馆?
是否在前臺。onStart方法中Activity可見但不在前臺敲街,不可交互团搞,而在onResume中在前臺。
職責(zé)不同多艇,onStart方法中主要還是進行初始化工作逻恐,而onResume方法,根據(jù)官方的建議峻黍,可以做開啟動畫和獨占設(shè)備的操作复隆。
onPause方法和onStop方法有什么區(qū)別?
是否可見姆涩。onPause時Activity可見挽拂,onStop時Activity不可見,但Activity對象還在內(nèi)存中骨饿。
在系統(tǒng)內(nèi)存不足的時候可能不會執(zhí)行onStop方法亏栈,因此程序狀態(tài)的保存、獨占設(shè)備和動畫的關(guān)閉宏赘、以及一些數(shù)據(jù)的保存最好在onPause中進行绒北,但要注意不能太耗時。
額外的方法
//獲取Launcher第一幀
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
}
onNewIntent()
當(dāng)一個Activity被重新啟動時候,如果該Activity沒有被重新創(chuàng)建,那么就會調(diào)用此方法
onLowMemory()
onTrimMemory()
當(dāng)系統(tǒng)內(nèi)存不夠的時候會調(diào)用,我們可以在這兩個方法中手動釋放資源
startActivForResult()
當(dāng)新Activity關(guān)閉后察署,新Activity返回的數(shù)據(jù)通過Intent進行傳遞闷游,android平臺會調(diào)用前面Activity 的onActivityResult()方法,把存放了返回數(shù)據(jù)的Intent作為第三個輸入?yún)?shù)傳入,在onActivityResult()方法中使用第三個輸入?yún)?shù)可以取出新Activity返回的數(shù)據(jù)脐往。
跳轉(zhuǎn)standard
假設(shè)A跳B
B的啟動模式是standardA onPause()
B onCreate()--onResume()
A onStop()B返回到A
B onPause()
A onRestart()--onResume()
B onStop()---onDestory()結(jié)論:
先將原來的Activity暫停(onPause),然后將將要展示的Activity獲取焦點,最后將原Activity隱藏獲銷毀
跳轉(zhuǎn)singleTop
假設(shè)A跳B
B的啟動模式是singleTopB已經(jīng)在棧頂
B onPause()--onNewIntent()--onResume()
B不在棧頂
B 創(chuàng)建新的Activity
跳轉(zhuǎn)singleTask
假設(shè)A跳B
B的啟動模式是singleTaskB已經(jīng)在棧頂
B onPause()--onNewIntent()--onResume()
B不在棧頂
先銷毀中間所有的Activity--頂層onPause()--B onNewIntent()--onRestart()-- onStart()--onResume()--頂層Activity銷毀
Acticvity的啟動模式會影響結(jié)果
startActivForResult--onActivityResult()--onRestart()
橫豎屏切換
在不同的真機上 onStop() 和 onSaveInstanceState() 的執(zhí)行順序會有差別
onPause()
↓
onStop()
↓onSaveInstanceState()
當(dāng)某個activity變得"容易"被系統(tǒng)銷毀時休吠,該activity的onSaveInstanceState()就會被執(zhí)行,除非該activity是被用戶主動銷毀的业簿,例如當(dāng)用戶按BACK鍵的候瘤礁。 如果我們需要覆寫onSaveInstanceState()方法, 一般會在第一行代碼中調(diào)用該方法的默認實現(xiàn):super.onSaveInstanceState(outState)。與此同時辖源,當(dāng)我們需要保存額外的數(shù)據(jù)時, 就需要覆寫onSaveInstanceState()方法蔚携。
↓onDestroy()
↓
onCreate()
↓
onStart()
↓onRestoreInstanceState()
取出我們在onSaveInstanceState()中所保存的值 我們的onCreate()中super.onCreate(savedInstanceState);
這個savedInystanceState對象也可以取出值
↓onResume()