activity生命周期及数据保存
为什么80%的码农都做不了架构师?>>>
public class ActivityLife extends Activity {// 在Activity生命周期开始时被调用@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d("***", "onCreate");}// 当activity从停止状态重新启动时调用@Overrideprotected void onRestart() {super.onRestart();Log.d("***", "onRestart");}// 当activity对用户即将可见的时候调用。@Overrideprotected void onStart() {super.onStart();Log.d("***", "onStart");}// onCreate完成后被调用,用来恢复UI状态@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);Log.d("***", "onRestoreInstanceState");}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);Log.d("***", "onActivityResult");}// 开始与用户进行交互@Overrideprotected void onResume() {super.onResume();Log.d("***", "onResume");}// Activity即将移出栈顶保留UI状态时调用此方法@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);Log.d("***", "onSaveInstanceState");}// 当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用// CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。@Overrideprotected void onPause() {super.onPause();Log.d("***", "onPause");}// 当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。@Overrideprotected void onStop() {super.onStop();Log.d("***", "onStop");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("***", "onDestroy");}@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);Log.d("***", "onConfigurationChanged");}
}
可视过程的生命周期onStart() 直到onPause(),可交互的生命周期 onResume() 至onPause()
保存activity状态
当系统因为某种原因关闭了一个activity之后。用户会期望当他再次回到那个activity的时候,它仍保持着上次离开时的样子。
保存activity状态有两种方式:
1、onSaveInstanceState
它会将一个Bundle对象传递给该方法。当activity再次启动时,这个Bundle会传递给onCreate()方法和随着onStart()方法调用的onRestoreInstanceState(),
所以它们两个都可以恢复捕获的状态。
那么,在什么时刻会执行onSaveInstanceState方法
1、当用户按下HOME键时。
这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
5、屏幕方向切换时,例如从竖屏切换到横屏时。
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。
说到onSaveInstanceState,那么必须来看看onRestoreInstanceState方法,onRestoreInstanceState只有在Activity确实被系统回收了才会被调用,比如横竖屏切换onRestoreInstanceState就会被执行,一般来说按Home键,再去回到Activity,Acitivity一般不被系统销毁,onRestoreInstanceState也不会被调用。
2、onPause
因为onSaveInstanceState()不是总被调用,所以你应该只用它来为activity保存一些临时的状态,而不能用来保存持久性数据,因为可能根本保存不了,
而是应该用onPause()来达到这个目的。
我的博客其他文章列表
http://my.oschina.net/helu
转载于:https://my.oschina.net/helu/blog/159024
activity生命周期及数据保存相关推荐
- Activity 生命周期与状态保存
看API的时候,零零散散的记录下来的,看完了总算对Activity的生命周期有了一个全面的了解.相信会对大家有些帮助的. onCreate->onRestart->onStart-> ...
- 基本程序单元Activity—Activity生命周期之数据传递小程序
一. 实验目的 (1) 掌握Andriod Studio的基本使用方法: (2) 掌握Andriod Studio中常用的控件及其使用方法: 二. 实验内容 题目: 编写一个数据传递的小程序,要求在第 ...
- Android Activity生命周期★
1.Activity Activity由Activity栈管理.启动一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部. A ...
- 基础总结篇之一:Activity生命周期
子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...
- activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)
1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Activity生命周期的补充
正常来说Activity的生命周期是这样的 如果有重写 onSaveInstanceState(Bundle outState) 来保存重要参数 ,比如有重新赋值的成员变量,那么 onSaveInst ...
- Activity生命周期 onCreate onResume onStop onPause
Android应用开发提高系列(6)--Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...
- 【Android】Activity生命周期
转载至:http://blog.csdn.net/liuhe688/article/details/6733407 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者 ...
最新文章
- tcp三次握手和syn 洪水攻击
- Zookeeper集群搭建(配置详解)
- 漫画算法:找出缺失的整数
- Office2007 PDF/XPS格式插件下载
- 实战Python轻松实现绘制词云图(附详细源码)
- 矩阵的乘法与利用矩阵求解线性方程组
- 数据流图DFD的画法
- Nginx的try_files指令详解
- (六)DDR协议功能之ODT模式与ZQ校准
- 继续教育-职场学习法 试题及答案
- 全球 Hoster Point DNS 遭受重大 DDoS 攻击
- 8-25 26 veriloga语言
- 全国计算机等级考试 和ccf,【我与CCF】我与CCF的不解之缘
- 如何分割cue+ape、cue+flac、cue+wav、cue+dts整轨音乐文件
- OCT病灶分割论文泛读
- 磁盘分区、格式化及 LVM 管理
- android 逆向ida,浅谈安卓逆向协议(四)- ida pro - 小红书
- 按键精灵自动登录网站范例源码
- ros入门 工程目录结构、节点通信方式、基本操作命令
- 小程序 wxml里时间戳转日期
热门文章
- 我对计算机的看法英语作文,我对网络的看法英语作文
- oracle求某个数的阶乘,Oracle SQL实现阶乘的几个方法
- js调用数科阅读器_阅读大型 JavaScript 源码时有什么好用的工具?
- 谷歌大幅削减其应用商店服务费
- 教你如何运用python实现简单文件读写函数
- poj1679(次小生成树)
- Codeforces Round #648 (Div. 2)题解 A-D
- 华硕路由器安装aria2_网易UU加速器联动华硕,瞄准主机玩家联网刚需
- 怎么使用html及jsp开发,jsp怎么用css
- python androidhelper 语音识字_Android语音播报、后台播报、语音识别