android中Activity的生命周期各回调函数的调用顺序学习心得

来源:互联网 发布:linux 查看登陆的用户 编辑:程序博客网 时间:2024/05/22 10:04

Activity是android里重要组件,主要提供用户界面的,一般每个App都会用到它,牢记activity的生命周期中的各个回调函数的回调顺序是非常必要的。google官方提供的那张图,基本说明了问题,这里也不贴了。尽管之前看了n遍了,但是为了加深印象,自己必须得测试几遍。下面是各个场景测试情况(清单文件未作任何改动):

1、开始一个App时,第一个Activity启动(记作A):onCreate->onStart->onResume,按下BACK键:onPause->onStop->onDestroy。

2、再启动A:onCreate->onStart->onResume,按下HOME键:onPause->onStop。再显示A:onRestart->onStart->onResume。

3、从A跳转到B:A.onPause->B.onCreate->B.onStart->B.onResume->A.onStop。

4、B.finish返回到A:B.onPause->A.onRestart->A.onStart->A.onResume->B.onStop->B.onDestroy。

5、A.finish或按BACK键:onPause->onStop->onDestroy。

上面可以看出:a.任何Activity从onCreate开始到onDestroy结束,且这两个函数只执行一次,其他都可以根据状态反复执行多次。b.任何Acitivity从完全不可见到完全可见,都会回调onStart->onResume。c.任何Activity从完全可见到完全不可见,都会回调onPause->onStop。d.当前Activity将要变为不可见(跳转或finish后)先只是onPause,等另一个完全覆盖(当前Activity完全不可见),再onStop(若finish则还会onDestroy)。 e.默认情况下finish()等同于按BACK键。


6、A已启动,旋转屏幕竖->横:onPause->onStop->onDestroy,onCreate->onStart->onResume。

7、再旋转屏幕横->竖:onPause->onStop->onDestroy,onCreate->onStart->onResume。

上面可以看出:屏幕旋转时,不管竖->横还是横->竖,Activity都会先完成当前生命周期onPause->onStop->onDestroy,再重新开始一个生命周期onCreate->onStart->onResume。之前听人说横竖切换不一样,本人测试时都一样,不知道是否跟版本有关。


8、A已启动,点击一个按钮,弹出对话框(Dialog),A部分可见,再关闭对话框:不会回调任何函数。

9、清单中改B的theme="@android:style/theme.Dialog"。A已启动,A跳转到B,A部分可见A.onPause->B.onCreate->B.onStart->B.onResume。

10、再B.finish返回到A:A.onResume->B.onStop->B.onDestroy。

11、代码中改B的setTheme(android.R.style.Theme_Dialog),A已启动,A跳转到B,B的外观跟9一样,但A完全不可见:回调过程跟3一样。

12、再B.finish返回到A:回调过程跟4一样。

上面可以看出:a.若弹出Dialog时,虽然Activity部分可见,但也不回调任何函数。b.清单中修改Activity.theme为Dialog,当跳转到此Activity时,前一个Activiy部分可见,不会回调onStop,返回后只回调onResume。c.代码中修改Activity.theme为Dialog,当跳转到此Activity时,虽然外观为Dialog,但前一个Activiy完全不可见,回调跟非Dialog主题的一样。d.跳转前的Activity,跳转后,若部分可见只执行onPause,不执行onStop,返回后不执行onRestart和onStart,只执行onResume。e.系统Dialog是弹出,非Activity跳转,所以不回调任何函数。

以上都是实际测试后,得出的结论。



0 0
原创粉丝点击