关于“熄屏、转屏、Home键返回、Activity跳转”对activity生命状态影响的分析
2016-05-15 22:53
549 查看
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()重新读取。对于旋转屏幕则是程序关于又重新打开,因此程序运行的数据一定要保存好。暂时就写到这里,回去睡觉啦~~
相关文章推荐
- bootstrap table 服务器端分页--ashx+ajax
- Kali Rolling 解决中文乱码问题
- 关于hasnextLine()方法的一些理解
- 排列-hdu_1027_Ignatius and the Princess II
- Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持
- 网络时间核对
- Java NIO系列教程(一) Java NIO 概述
- QT5。怎么开启C++11标准
- TCP的三次握手与四次挥手过程的每一步的具体状态变换
- LeetCode-234.Palindrome Linked List
- 在eclipse中搭建struts2开发环境
- 15 个简单、有趣而实用的 单行 HTTP Server
- spark性能优化:数据倾斜调优
- 理解RESTful架构
- 在Ubuntu 14.04 64bit上升级Chrome浏览器
- 用Flask 搭建RESTful APIs 服务器端
- 《Windows API》读取文件
- Yahoo军规
- 安全卫士5--MD5加密
- 关于hasnextLine()方法的一些理解