Activity生命周期事件实验

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

 

转载于:https://my.oschina.net/u/2606060/blog/707908

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值