为什么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生命周期及数据保存相关推荐

  1. Activity 生命周期与状态保存

    看API的时候,零零散散的记录下来的,看完了总算对Activity的生命周期有了一个全面的了解.相信会对大家有些帮助的. onCreate->onRestart->onStart-> ...

  2. 基本程序单元Activity—Activity生命周期之数据传递小程序

    一. 实验目的 (1) 掌握Andriod Studio的基本使用方法: (2) 掌握Andriod Studio中常用的控件及其使用方法: 二. 实验内容 题目: 编写一个数据传递的小程序,要求在第 ...

  3. Android Activity生命周期★

    1.Activity Activity由Activity栈管理.启动一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部. A ...

  4. 基础总结篇之一:Activity生命周期

    子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...

  5. activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)

    1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...

  6. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  7. Activity生命周期的补充

    正常来说Activity的生命周期是这样的 如果有重写 onSaveInstanceState(Bundle outState) 来保存重要参数 ,比如有重新赋值的成员变量,那么 onSaveInst ...

  8. Activity生命周期 onCreate onResume onStop onPause

    Android应用开发提高系列(6)--Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...

  9. 【Android】Activity生命周期

    转载至:http://blog.csdn.net/liuhe688/article/details/6733407 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者 ...

最新文章

  1. tcp三次握手和syn 洪水攻击
  2. Zookeeper集群搭建(配置详解)
  3. 漫画算法:找出缺失的整数
  4. Office2007 PDF/XPS格式插件下载
  5. 实战Python轻松实现绘制词云图(附详细源码)
  6. 矩阵的乘法与利用矩阵求解线性方程组
  7. 数据流图DFD的画法
  8. Nginx的try_files指令详解
  9. (六)DDR协议功能之ODT模式与ZQ校准
  10. 继续教育-职场学习法 试题及答案
  11. 全球 Hoster Point DNS 遭受重大 DDoS 攻击
  12. 8-25 26 veriloga语言
  13. 全国计算机等级考试 和ccf,【我与CCF】我与CCF的不解之缘
  14. 如何分割cue+ape、cue+flac、cue+wav、cue+dts整轨音乐文件
  15. OCT病灶分割论文泛读
  16. 磁盘分区、格式化及 LVM 管理
  17. android 逆向ida,浅谈安卓逆向协议(四)- ida pro - 小红书
  18. 按键精灵自动登录网站范例源码
  19. ros入门 工程目录结构、节点通信方式、基本操作命令
  20. 小程序 wxml里时间戳转日期

热门文章

  1. 我对计算机的看法英语作文,我对网络的看法英语作文
  2. oracle求某个数的阶乘,Oracle SQL实现阶乘的几个方法
  3. js调用数科阅读器_阅读大型 JavaScript 源码时有什么好用的工具?
  4. 谷歌大幅削减其应用商店服务费
  5. 教你如何运用python实现简单文件读写函数
  6. poj1679(次小生成树)
  7. Codeforces Round #648 (Div. 2)题解 A-D
  8. 华硕路由器安装aria2_网易UU加速器联动华硕,瞄准主机玩家联网刚需
  9. 怎么使用html及jsp开发,jsp怎么用css
  10. python androidhelper 语音识字_Android语音播报、后台播报、语音识别