忽然发现最基础的activity生命周期很重要,就决定做一些实验,实验在不同启动模式下,Activity生命周期方法的调用时机
以下关于activity的生命周期实验,是在2016.7.7,基于Android SDK VERSION 24 。
前面列出实验的生命周期LOG,在最后写出了分析总结。
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---------onWindowFocusChanged
然后按返回键:
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---------onDetachedFromWindow
这样一个StandardActivity的生命周期就结束了。
假如在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。