关于“熄屏、转屏、Home键返回、Activity跳转”对activity生命状态影响的分析

来源:互联网 发布:淘宝店铺宝贝分类图片 编辑:程序博客网 时间:2024/06/09 22:03

1 说明

最近写了一个程序,用到了Service将数据传给Activity,然后Activity进行界面数据显示。发现Service对数值的改变,在熄屏的状态下和Activity 界面显示的数值不一致,便想到熄屏状态Activity的生命状态被影响了。这里将熄屏和转屏对Activity生命状态的改变惊醒对照分析。
activity生命周期状态图:
这里写图片描述

2 熄屏

当程序被打开,生命状态运行到Onresume():

05-15 22:30:24.074 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)05-15 22:30:24.113 30285-30285/? I/houyafei: -------------->onStart()05-15 22:30:24.116 30285-30285/? I/houyafei: -------------->onResume()

熄屏后:

05-15 22:31:42.417 30285-30285/? I/houyafei: -------------->onPause()05-15 22:31:42.431 30285-30285/? I/houyafei: -------------->onStop()

再次点亮屏幕:

05-15 22:32:48.090 30285-30285/? I/houyafei: -------------->onRestart()05-15 22:32:48.100 30285-30285/? I/houyafei: -------------->onStart()05-15 22:32:48.103 30285-30285/? I/houyafei: -------------->onResume()

退出程序:

05-15 22:34:13.997 30285-30285/? I/houyafei: -------------->onPause()05-15 22:34:14.308 30285-30285/? I/houyafei: -------------->onStop()05-15 22:34:14.308 30285-30285/? I/houyafei: -------------->onDestroy()

3 转屏

打开程序(竖屏):

05-15 22:35:01.520 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)05-15 22:35:01.529 30285-30285/? I/houyafei: -------------->onStart()05-15 22:35:01.531 30285-30285/? I/houyafei: -------------->onResume()

开始旋转为横屏:

05-15 22:35:38.452 30285-30285/? I/houyafei: -------------->onPause()05-15 22:35:38.453 30285-30285/? I/houyafei: -------------->onStop()05-15 22:35:38.453 30285-30285/? I/houyafei: -------------->onDestroy()05-15 22:35:38.516 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)05-15 22:35:38.532 30285-30285/? I/houyafei: -------------->onStart()05-15 22:35:38.532 30285-30285/? I/houyafei: -------------->onResume()

再次旋转为竖屏:

05-15 22:37:01.296 30285-30285/? I/houyafei: -------------->onPause()05-15 22:37:01.296 30285-30285/? I/houyafei: -------------->onStop()05-15 22:37:01.296 30285-30285/? I/houyafei: -------------->onDestroy()05-15 22:37:01.387 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)05-15 22:37:01.409 30285-30285/? I/houyafei: -------------->onStart()05-15 22:37:01.411 30285-30285/? I/houyafei: -------------->onResume()

关闭程序:

05-15 22:37:55.848 30285-30285/? I/houyafei: -------------->onPause()05-15 22:37:56.139 30285-30285/? I/houyafei: -------------->onStop()05-15 22:37:56.139 30285-30285/? I/houyafei: -------------->onDestroy()

也就是说,选装屏幕相当于程序瞬间关闭然后重新打开。

4 activity之间跳转

打开程序启动第一个Activity:

05-15 22:39:31.526 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)05-15 22:39:31.537 30285-30285/? I/houyafei: -------------->onStart()05-15 22:39:31.538 30285-30285/? I/houyafei: -------------->onResume()

点击切换到第二个Activity,则第一个Activity的生命状态:

05-15 22:40:17.056 30285-30285/? I/houyafei: -------------->onPause()05-15 22:40:17.499 30285-30285/? I/houyafei: -------------->onStop()

再返回第一个Activity:

05-15 22:40:45.307 30285-30285/? I/houyafei: -------------->onRestart()05-15 22:40:45.308 30285-30285/? I/houyafei: -------------->onStart()05-15 22:40:45.308 30285-30285/? I/houyafei: -------------->onResume()

到这里大家肯定会发现,切换Activity和熄屏状态,对Activity生命周期的影响是一样的。

5返回桌面

打开Activity:

05-15 22:43:16.000 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)05-15 22:43:16.011 30285-30285/? I/houyafei: -------------->onStart()05-15 22:43:16.013 30285-30285/? I/houyafei: -------------->onResume()

点击Home键后:

05-15 22:43:51.699 30285-30285/? I/houyafei: -------------->onPause()05-15 22:43:52.011 30285-30285/? I/houyafei: -------------->onStop()

点击桌面程序图标再次打开程序(1):

05-15 22:44:36.597 30285-30285/? I/houyafei: -------------->onRestart()05-15 22:44:36.601 30285-30285/? I/houyafei: -------------->onStart()05-15 22:44:36.602 30285-30285/? I/houyafei: -------------->onResume()

点击菜单键再次打开程序(2):

05-15 22:47:02.261 30285-30285/? I/houyafei: -------------->onRestart()05-15 22:47:02.275 30285-30285/? I/houyafei: -------------->onStart()05-15 22:47:02.276 30285-30285/? I/houyafei: -------------->onResume()

以上两种状态是一致的。

6总结

对于,熄屏、Activity跳转、Home键返回主界面等对Activity生命周期的影响是一样的。因此,对于一些程序运行的数据一定要在onPause()中保存,在onResume()重新读取。
对于旋转屏幕则是程序关于又重新打开,因此程序运行的数据一定要保存好。暂时就写到这里,回去睡觉啦~~

1 0