突然發現最基礎的activity生命週期很重要,就決定作一些實驗,實驗在不一樣啓動模式下,Activity生命週期方法的調用時機生命週期
如下關於activity的生命週期實驗,是在2016.7.7,基於Android SDK VERSION 24 。get
前面列出實驗的生命週期LOG,在最後寫出了分析總結。it
1.Standard模式基礎
這個標準模式是activity最經常使用的,啓動的生命週期方法變化你們也應該最熟悉方法
啓動StandardActivity:總結
com.example.lifecycle.StandardActivity---------onApplyThemeResource
com.example.lifecycle.StandardActivity---------onCreate
com.example.lifecycle.StandardActivity---------onContentChanged
com.example.lifecycle.StandardActivity---------onStart
com.example.lifecycle.StandardActivity---------onPostCreate
com.example.lifecycle.StandardActivity---------onResume
com.example.lifecycle.StandardActivity---------onPostResume
com.example.lifecycle.StandardActivity---------onAttachedToWindow
com.example.lifecycle.StandardActivity---------onWindowFocusChangedactivity
而後按返回鍵:top
com.example.lifecycle.StandardActivity---------finish
com.example.lifecycle.StandardActivity---------onPause
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onStop
com.example.lifecycle.StandardActivity---------onDestroy
com.example.lifecycle.StandardActivity---------onDetachedFromWindowvi
這樣一個StandardActivity的生命週期就結束了。co
假如在StandardActivity resume的時候,按下Home鍵:
com.example.lifecycle.StandardActivity---------onUserLeaveHint
com.example.lifecycle.StandardActivity---------onPause
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onStop
而後再點擊應用圖標:
com.example.lifecycle.StandardActivity---------onRestart
com.example.lifecycle.StandardActivity---------onStart
com.example.lifecycle.StandardActivity---------onResume
com.example.lifecycle.StandardActivity---------onPostResume
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
2.SingleTop模式
由StandardActivity跳轉到SingleTopActivity:
com.example.lifecycle.StandardActivity---------onUserLeaveHint
com.example.lifecycle.StandardActivity---------onPause
com.example.lifecycle.SingleTopActivity---------onApplyThemeResource
com.example.lifecycle.SingleTopActivity---------onCreate
com.example.lifecycle.SingleTopActivity---------onContentChanged
com.example.lifecycle.SingleTopActivity---------onStart
com.example.lifecycle.SingleTopActivity---------onPostCreate
com.example.lifecycle.SingleTopActivity---------onResume
com.example.lifecycle.SingleTopActivity---------onPostResume
com.example.lifecycle.SingleTopActivity---------onAttachedToWindow
com.example.lifecycle.SingleTopActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onStop
由SingleTopActivity跳轉到該SingleTopActivity:
com.example.lifecycle.SingleTopActivity---------onPause
com.example.lifecycle.SingleTopActivity---------onNewIntent
com.example.lifecycle.SingleTopActivity---------onResume
com.example.lifecycle.SingleTopActivity---------onPostResume
而後再按返回鍵:
com.example.lifecycle.SingleTopActivity---------finish
com.example.lifecycle.SingleTopActivity---------onPause
com.example.lifecycle.StandardActivity---------onRestart
com.example.lifecycle.StandardActivity---------onStart
com.example.lifecycle.StandardActivity---------onResume
com.example.lifecycle.StandardActivity---------onPostResume
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTopActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTopActivity---------onStop
com.example.lifecycle.SingleTopActivity---------onDestroy
com.example.lifecycle.SingleTopActivity---------onDetachedFromWindow
3.SingleTask模式
由SingleTopActivity跳轉到SingleTaskActivity:
com.example.lifecycle.SingleTopActivity---------onUserLeaveHint
com.example.lifecycle.SingleTopActivity---------onPause
com.example.lifecycle.SingleTaskActivity---------onApplyThemeResource
com.example.lifecycle.SingleTaskActivity---------onCreate
com.example.lifecycle.SingleTaskActivity---------onContentChanged
com.example.lifecycle.SingleTaskActivity---------onStart
com.example.lifecycle.SingleTaskActivity---------onPostCreate
com.example.lifecycle.SingleTaskActivity---------onResume
com.example.lifecycle.SingleTaskActivity---------onPostResume
com.example.lifecycle.SingleTaskActivity---------onAttachedToWindow
com.example.lifecycle.SingleTaskActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTopActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTopActivity---------onStop
由SingleTaskActivity跳轉到該SingleTaskActivity:
com.example.lifecycle.SingleTaskActivity---------onPause
com.example.lifecycle.SingleTaskActivity---------onNewIntent
com.example.lifecycle.SingleTaskActivity---------onResume
com.example.lifecycle.SingleTaskActivity---------onPostResume
而後再按返回鍵:
com.example.lifecycle.SingleTaskActivity---------finish
com.example.lifecycle.SingleTaskActivity---------onPause
com.example.lifecycle.SingleTopActivity---------onRestart
com.example.lifecycle.SingleTopActivity---------onStart
com.example.lifecycle.SingleTopActivity---------onResume
com.example.lifecycle.SingleTopActivity---------onPostResume
com.example.lifecycle.SingleTopActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTaskActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTaskActivity---------onStop
com.example.lifecycle.SingleTaskActivity---------onDestroy
com.example.lifecycle.SingleTaskActivity---------onDetachedFromWindow
由SingleTaskActivity跳轉到SingleTopActivity,而後再跳轉到該SingleTaskActivity:
com.example.lifecycle.SingleTaskActivity---------onUserLeaveHint
com.example.lifecycle.SingleTaskActivity---------onPause
com.example.lifecycle.SingleTopActivity---------onApplyThemeResource
com.example.lifecycle.SingleTopActivity---------onCreate
com.example.lifecycle.SingleTopActivity---------onContentChanged
com.example.lifecycle.SingleTopActivity---------onStart
com.example.lifecycle.SingleTopActivity---------onPostCreate
com.example.lifecycle.SingleTopActivity---------onResume
com.example.lifecycle.SingleTopActivity---------onPostResume
com.example.lifecycle.SingleTopActivity---------onAttachedToWindow
com.example.lifecycle.SingleTopActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTaskActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTaskActivity---------onStop
//如下是再跳轉到該SingleTaskActivity
com.example.lifecycle.SingleTopActivity---------onPause
com.example.lifecycle.SingleTopActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTaskActivity---------onNewIntent
com.example.lifecycle.SingleTaskActivity---------onRestart
com.example.lifecycle.SingleTaskActivity---------onStart
com.example.lifecycle.SingleTaskActivity---------onResume
com.example.lifecycle.SingleTaskActivity---------onPostResume
com.example.lifecycle.SingleTaskActivity---------onWindowFocusChanged
com.example.lifecycle.SingleTopActivity---------onStop
com.example.lifecycle.SingleTopActivity---------onDestroy
com.example.lifecycle.SingleTopActivity---------onDetachedFromWindow
3.SingleInstance模式
由SingleTopActivity跳轉到SingleInstanceActivity:
com.example.lifecycle.StandardActivity---------onUserLeaveHint
com.example.lifecycle.StandardActivity---------onPause
com.example.lifecycle.SingleInstanceActivity---------onApplyThemeResource
com.example.lifecycle.SingleInstanceActivity---------onCreate
SingleInstanceActivity: getTaskId----------147
com.example.lifecycle.SingleInstanceActivity---------onContentChanged
com.example.lifecycle.SingleInstanceActivity---------onStart
com.example.lifecycle.SingleInstanceActivity---------onPostCreate
com.example.lifecycle.SingleInstanceActivity---------onResume
com.example.lifecycle.SingleInstanceActivity---------onPostResume
com.example.lifecycle.SingleInstanceActivity---------onAttachedToWindow
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.SingleInstanceActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onStop
而後再啓動SingleInstanceActivity:
com.example.lifecycle.SingleInstanceActivity---------onPause
com.example.lifecycle.SingleInstanceActivity---------onNewIntent
com.example.lifecycle.SingleInstanceActivity---------onResume
--------- beginning of /dev/log/system
com.example.lifecycle.SingleInstanceActivity---------onPostResume
而後啓動StandardActivity:
com.example.lifecycle.SingleInstanceActivity---------onUserLeaveHint
com.example.lifecycle.SingleInstanceActivity---------onPause
com.example.lifecycle.StandardActivity---------onApplyThemeResource
com.example.lifecycle.StandardActivity---------onCreate
StandardActivity: getTaskId----------146
com.example.lifecycle.StandardActivity---------onContentChanged
com.example.lifecycle.StandardActivity---------onStart
com.example.lifecycle.StandardActivity---------onPostCreate
com.example.lifecycle.StandardActivity---------onResume
com.example.lifecycle.StandardActivity---------onPostResume
com.example.lifecycle.StandardActivity---------onAttachedToWindow
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.SingleInstanceActivity---------onWindowFocusChanged
com.example.lifecycle.SingleInstanceActivity---------onStop
而後再啓動該SingleInstanceActivity:
com.example.lifecycle.StandardActivity---------onUserLeaveHint
com.example.lifecycle.StandardActivity---------onPause
com.example.lifecycle.SingleInstanceActivity---------onNewIntent
com.example.lifecycle.SingleInstanceActivity---------onRestart
com.example.lifecycle.SingleInstanceActivity---------onStart
com.example.lifecycle.SingleInstanceActivity---------onResume
com.example.lifecycle.SingleInstanceActivity---------onPostResume
com.example.lifecycle.SingleInstanceActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onWindowFocusChanged
com.example.lifecycle.StandardActivity---------onStop
總結
1.Standard模式的Activity啓動和退出,按照任務棧先進後出的原則,遵循正常的生命週期運轉。
2.SingleTop模式的Activity啓動和退出,和Standard模式大致同樣,區別在於若是該SingleTopActivity若是位於棧頂的話,再跳轉的話不會從新建立一個SingleTopActivity,這時的生命週期是onPause-----onNewIntent---------onResume。
3.SingleTask模式的Activity,若是再啓動時,任務棧裏面已經有了一個該Activity,那麼就不會建立新的SingleTaskActivity。這時若是該SingleTaskActivity在棧頂的話,和SingleTopActivity同樣走的生命週期是onPause-----onNewIntent---------onResume。若是SingleTaskActivity不在棧頂的話,會把它上面的Activity所有銷燬,此時SingleTaskActivity走的生命週期是onNewIntent---------onRestart----------onStart-----------onResume。
4.SingleInstance模式的Activity,區別於上面三種模式的一點是,SingleInstanceActivity的TaskId是單獨的一個,其餘三種模式的TaskId是同樣的在一個任務棧裏面。SingleInstanceActivity的生命週期和SingleTaskActivity的同樣,不過於SingleTaskActivity不一樣的一點是,若是Activity不在棧頂的話,SingleTaskActivity會把它上面的Activity所有銷燬,而SingleInstanceActivity會直接把SingleInstanceActivity調到棧頂而不會影響其餘的Activity,此時SingleInstanceActivity走的生命週期是onNewIntent---------onRestart----------onStart-----------onResume。