最近写了一个程序,用到了Service将数据传给Activity,然后Activity进行界面数据显示。发现Service对数值的改变,在熄屏的状态下和Activity 界面显示的数值不一致,便想到熄屏状态Activity的生命状态被影响了。这里将熄屏和转屏对Activity生命状态的改变惊醒对照分析。
activity生命周期状态图:
当程序被打开,生命状态运行到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()
打开程序(竖屏):
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()
也就是说,选装屏幕相当于程序瞬间关闭然后重新打开。
打开程序启动第一个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生命周期的影响是一样的。
打开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()
以上两种状态是一致的。
对于,熄屏、Activity跳转、Home键返回主界面等对Activity生命周期的影响是一样的。因此,对于一些程序运行的数据一定要在onPause()中保存,在onResume()重新读取。
对于旋转屏幕则是程序关于又重新打开,因此程序运行的数据一定要保存好。暂时就写到这里,回去睡觉啦~~