突然发现最基础的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。