超詳細的Activity與Fragment的生命週期圖,可能你們會說你這篇文章也太水了吧。就這麼一個破圖。但是我以爲它寫的很詳細,有些方法是哪些狀況下會運行,哪些狀況不會運行,寫的一清二楚。不知道你們能回答對多少。java
強烈建議你們把圖片右鍵另存到本地,而後本地放大看。看的更清楚!!bash
好了咱們先來逐個看看Activity中一些平時不經常使用的函數:ide
onPostCreate是指onPostCreate方法是指onCreate方法完全執行完畢的回調,onPostResume同理.函數
咱們先來看onUserInteraction:佈局
/**
* Called whenever a key, touch, or trackball event is dispatched to the
* activity. Implement this method if you wish to know that the user has
* interacted with the device in some way while your activity is running.
*
* <p>All calls to your activity's {@link #onUserLeaveHint} callback will * be accompanied by calls to {@link #onUserInteraction}. * * activity不管分發按鍵事件、觸摸事件或者軌跡球事件都會調用Activity#onUserInteraction()。 * 若是你想知道用戶用某種方式和你正在運行的activity交互,能夠重寫Activity#onUserInteraction()。 * 全部調用Activity#onUserLeaveHint()的回調都會首先回調Activity#onUserInteraction()。 */ 複製代碼
activity在分發各類事件的時候會調用該方法,注意:啓動另外一個activity,Activity#onUserInteraction()會被調用兩次,一次是activity捕獲到事件,另外一次是調用Activity#onUserLeaveHint()以前會調用Activity#onUserInteraction()。ui
那必定有人會問這個方法咱們有什麼用處呢。咱們看到咱們能夠用這個方法來監控用戶有沒有與當前的Activity進行交互,那咱們就能夠針對這個來假設場景,有個APP要求N分鐘後用戶沒有進行操做,那就自動出來動態壁紙,或者進行鎖屏界面,或者跳到登陸界面從新登陸等!那咱們只須要寫個倒計時,而後每次調用了onUserInteraction方法,就把時間重置便可。。多方便!!this
咱們再看onUserLeaveHint:spa
/**
* Called as part of the activity lifecycle when an activity is about to go into the background as the result of user choice.
* For example, when the user presses the Home key, {@link #onUserLeaveHint} will be called, but
* when an incoming phone call causes the in-call Activity to be automatically brought to the foreground,
*{@link #onUserLeaveHint} will not be called on the activity being interrupted.
*
* 當用戶的操做使一個activity準備進入後臺時,此方法會像activity的生命週期的一部分被調用。例如,當用戶按下Home鍵,
* Activity#onUserLeaveHint()將會被回調。可是當來電致使來電activity自動佔據前臺,Activity#onUserLeaveHint()將不會被回調。
*/
複製代碼
用戶手動離開當前activity,會調用該方法,好比用戶主動切換任務,短按home進入桌面等。系統自動切換activity不會調用此方法,如來電,滅屏等。code
咱們通常監聽返回鍵,確定是重寫onKeyDown方法,可是Home鍵和Menu鍵就很差監聽了。可是有了這個方法。咱們能夠作統一的監聽了。好比要監聽用戶點了Home鍵跳回到桌面後。咱們要求這個APP自動跳轉到解鎖界面。咱們只要在這裏作監聽出來便可。cdn
onContentChanged()是Activity中的一個回調方法,當Activity的佈局改動時,即setContentView()或者addContentView()方法執行完畢時就會調用該方法。那咱們能夠用來幹嗎呢。好比咱們平時寫的findViewById方法,也能夠統一放到這個方法下:
@Override
public void onContentChanged() {
super.onContentChanged();
mGalleryButton = (Button) findViewById( R.id.button1 );
mEditButton = (Button) findViewById( R.id.button2 );
}
複製代碼
onAttachedToWindow是在第一次onDraw前調用的。也就是咱們寫的View在沒有繪製出來時調用的,但只會調用一次。 好比,咱們寫狀態欄中的時鐘的View,在onAttachedToWindow這方法中作初始化工做,好比註冊一些廣播等等…… 並且若是要修改window窗口的尺寸,不會在onCreate方法中進行修改,而是在onAttachedToWindow方法中進行修改。 在Android4.0前面,若是想屏蔽Home鍵事件,還能夠在onAttachedToWindow這麼寫:
@Override
public void onAttachedToWindow() {
// TODO Auto-generated method stub
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
super.onAttachedToWindow();
}
複製代碼
只是如今在Android4.0後面這樣已經無效了,會報錯:
java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
複製代碼