超詳細的生命周期圖-你能回答全嗎


超詳細的Activity與Fragment的生命周期圖,可能大家會說你這篇文章也太水了吧。就這么一個破圖。可是我覺得它寫的很詳細,有些方法是哪些情況下會運行,哪些情況不會運行,寫的一清二楚。不知道大家能回答對多少。

強烈建議大家把圖片右鍵另存到本地,然后本地放大看??吹母宄?!

好了我們先來逐個看看Activity中一些平時不常用的函數(shù):

1. onPostCreate , onPostResume

onPostCreate是指onPostCreate方法是指onCreate方法徹底執(zhí)行完畢的回調(diào),onPostResume類似,那我們什么時候在可以使用這個呢。大家肯定遇到這種情況,在onCreate中獲取某個View的高度和寬度,發(fā)現(xiàn)獲取到的值是0,因為這個View可能還沒初始化好,這時候比如我們在onPostResume中取獲取這個View的高和寬,因為onPostResume是指onResume徹底執(zhí)行完畢的回調(diào),所以這時候去獲取就可以了。

2.onUserInteraction ,onUserLeaveHint

我們先來看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無論分發(fā)按鍵事件、觸摸事件或者軌跡球事件都會調(diào)用Activity#onUserInteraction()。 
  * 如果你想知道用戶用某種方式和你正在運行的activity交互,可以重寫Activity#onUserInteraction()。 
  * 所有調(diào)用Activity#onUserLeaveHint()的回調(diào)都會首先回調(diào)Activity#onUserInteraction()。 
  */  

activity在分發(fā)各種事件的時候會調(diào)用該方法,注意:啟動另一個activity,Activity#onUserInteraction()會被調(diào)用兩次,一次是activity捕獲到事件,另一次是調(diào)用Activity#onUserLeaveHint()之前會調(diào)用Activity#onUserInteraction()。

那一定有人會問這個方法我們有什么用處呢。我們看到我們可以用這個方法來監(jiān)控用戶有沒有與當(dāng)前的Activity進行交互,那我們就可以針對這個來假設(shè)場景,有個APP要求N分鐘后用戶沒有進行操作,那就自動出來動態(tài)壁紙,或者進行鎖屏界面,或者跳到登錄界面重新登錄等!那我們只需要寫個倒計時,然后每次調(diào)用了onUserInteraction方法,就把時間重置即可。。多方便!!


我們再看onUserLeaveHint:

/**  
  * 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.  
  * 
  * 當(dāng)用戶的操作使一個activity準(zhǔn)備進入后臺時,此方法會像activity的生命周期的一部分被調(diào)用。例如,當(dāng)用戶按下Home鍵, 
  * Activity#onUserLeaveHint()將會被回調(diào)。但是當(dāng)來電導(dǎo)致來電activity自動占據(jù)前臺,Activity#onUserLeaveHint()將不會被回調(diào)。 
  */  

用戶手動離開當(dāng)前activity,會調(diào)用該方法,比如用戶主動切換任務(wù),短按home進入桌面等。系統(tǒng)自動切換activity不會調(diào)用此方法,如來電,滅屏等。

我們一般監(jiān)聽返回鍵,肯定是重寫onKeyDown方法,但是Home鍵和Menu鍵就不好監(jiān)聽了。但是有了這個方法。我們可以做統(tǒng)一的監(jiān)聽了。比如要監(jiān)聽用戶點了Home鍵跳回到桌面后。我們要求這個APP自動跳轉(zhuǎn)到解鎖界面。我們只要在這里做監(jiān)聽出來即可。

3. onContentChanged

onContentChanged()是Activity中的一個回調(diào)方法,當(dāng)Activity的布局改動時,即setContentView()或者addContentView()方法執(zhí)行完畢時就會調(diào)用該方法。那我們可以用來干嘛呢。比如我們平時寫的findViewById方法,也可以統(tǒng)一放到這個方法下:

@Override  
public void onContentChanged() {  
    super.onContentChanged();  
  
    mGalleryButton = (Button) findViewById( R.id.button1 );  
    mEditButton = (Button) findViewById( R.id.button2 );  
}

4. onAttachedToWindow

onAttachedToWindow是在第一次onDraw前調(diào)用的。也就是我們寫的View在沒有繪制出來時調(diào)用的,但只會調(diào)用一次。
比如,我們寫狀態(tài)欄中的時鐘的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();
}

只是現(xiàn)在在Android4.0后面這樣已經(jīng)無效了,會報錯:

java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity,Service服務(wù),...
    開子的私家地閱讀 1,571評論 0 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評論 25 709
  • 前幾天整理了Java面試題集合,今天再來整理下Android相關(guān)的面試題集合.如果你希望能得到最新的消息,可以關(guān)注...
    Boyko閱讀 3,926評論 8 135
  • “再沒有誰的臉色需要照顧,也沒有誰的難題需要應(yīng)付,一個人睡著,或睡不著,喜歡看書,就看到日出……一切心血再不會,白...
    漫真閱讀 828評論 2 4
  • 2017年8月28日 星期一 天氣雨 崔笑媽媽親子日記 看到女兒拿回來的測試卷不免心中有些上火,昨天...
    崔笑媽媽閱讀 187評論 1 3

友情鏈接更多精彩內(nèi)容