Android-Activity临时数据的保存
Activity临时数据的保存是非常重要的,例如:一款小说APP应用,读者使用这款APP看到了223页,用户也没有去记看了多少页;
突然去接了个电话,或者开启的应用程序太多了,可能会导致这款APP应用程序的Activity被系统杀死回收了,当用户打完电话 再次打开这款APP的时候,又从第一页开始了,这样体验非常不好,所以需要去保存Activity的临时数据
在Activity中 onSaveInstanceState(Bundle outState)方法用Bundle保存数据,可以在onCreate(Bundle savedInstanceState)方法用Bundle恢复数据,注意要判断Bundle是否为空
package liudeli.activity.temp_data; import android.app.Activity;
import android.os.Bundle;
import android.util.Log; import liudeli.activity.R; public class TempDataActivity extends Activity { private final String TAG = TempDataActivity.class.getSimpleName(); /**
* 定义页数变量
*/
private int page; /**
* 此方法不仅仅可以初始化数据
* 还可以恢复保存的临时数据
* @param savedInstanceState onSaveInstanceState方法 保存的临时数据就存放在Bundle里面
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp_data); // 为什么要null判断,因为没有保存临时数据的时候,Bundle是null
// 所以第一次初始化一定是null
if (null != savedInstanceState) {
page = savedInstanceState.getInt("page");
Log.d(TAG, "onCreate 上次看到了" + page + "页");
} Log.d(TAG, "onCreate");
} /**
* 例如:当系统内存不足的时候,切换其他游戏应用程序 在玩游戏,有可能当前的Activity会被回收杀死
* 一旦出现回收杀死Activity就会调用此方法,然后在此方法保存临时数据
* @param outState
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 用户看到223页
page = 223;
outState.putInt("page", page);
} /**
* 恢复保存的临时数据
* @param savedInstanceState onSaveInstanceState方法 保存的临时数据就存放在Bundle里面
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 这个方法不需要判断savedInstanceState null,因为不可能为null,只有保存过数据,再次打开Activity才会调用此方法
page = savedInstanceState.getInt("page");
Log.d(TAG, "onRestoreInstanceState 上次看到了" + page + "页");
} /******* 下面是一系列生命周期方法,用来观察,Activity被系统杀死,又重写启动的Log打印 ******/ @Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
} @Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
} @Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
} @Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
如何才能让这个Activity被系统杀死回收呢?
答:如果要测试的话,可以用模拟器 横竖屏切换一下,Activity就被杀死,然后自动重新启动Activity
以上图 横竖屏切换后,系统会默认会把Activity杀死回收,所以执行以下方法:
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onPause
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onStop
12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onDestroy
系统会自动启动这个Activity,请看下面的Log
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate 上次看到了223页
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onCreate
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onStart
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onRestoreInstanceState 上次看到了223页
12-12 08:11:50.460 3347-3347/liudeli.activity D/TempDataActivity: onResume
Android-Activity临时数据的保存的更多相关文章
- android应用的数据应该保存到哪儿
王永超王永超嫖娼 做android app开发会涉及到不同数据的保存,比如数据缓存,客户登陆信息保存,客户状态的保存等等. 那针对这不同的数据我们应该保存在什么地方呢? 1.应用卸载也不会删除的数据 ...
- Android activity之间数据传递和共享的方式之Application
1.基于消息的通信机制 Intent ---bundle ,extra 数据类型有限,比如遇到不可序列化的数据Bitmap,InputStream,或者LinkedList链表等等数据类型就不太好用 ...
- Android Activity 传递数据
activity中数据的传递方式有2中,一种是使用putExtra()传递,另外一种是传递Bundle对象,使用putExtras()方法. 方法一 发送数据 putExtra()传送的是键值对,第一 ...
- Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制
一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/fi ...
- android Activity之间数据传递 Parcelable和Serializable接口的使用
Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口.0.解 ...
- 简单的三方登录SDK示例,Android Activity之间数据的传递
先建立Library工程,即普通工程然后在Android的属性勾选Library选项. 这里建立的工程为 mySdk ,Activity名为LoginActivity. LoginActivity代码 ...
- Android Activity传递数据使用getIntent()接收不到,揭秘Intent传递数据与Activity启动模式singleTask的关系。
activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.. 如果要启动的activit ...
- android activity在横竖屏切换的时候不重新调用onCreate方法
在安卓系统中,横竖屏切换会默认重新调用onCreate等生命周期方法,如果此时有一些临时数据没有保存下来,很有可能会导致该数据丢失. 因此我们可以进行以下设置,来避免恒切换时重新调用onCreate方 ...
- Android中突发情况Activity数据的保存和恢复
Android中突发情况Activity数据的保存和恢复 写在前面:在我们的APP使用的过程中,总有可能出现各种手滑.被压在后台.甚至突然被杀死的情况.所以对APP中一些临时数据或关键持久型数据,就需 ...
随机推荐
- A标签的href设置为#代表什么意思?
空锚点<a href="#abc">a link <#>表示跳到锚点abc,<a href="#">a link <# ...
- Variant
class RTL_DELPHIRETURN Variant: public TVarData Variant转换为字符串 System::Variants::VarToStr VariantArra ...
- 【转】运输层TCP协议详细介绍
TCP是TCP/IP协议族中非常复杂的一个协议.它具有以下特点: 1:面向连接的运输层协议.在使用TCP协议之前,首先需要建立TCP连接.传送数据完毕后,必须释放已经建立的TCP连接. 2:一条TCP ...
- Python_安装官方whl包和tar.gz包
Windows环境: 安装whl包:pip install wheel -> pip install **.whl 安装tar.gz包:cd到解压后路径,python setup. ...
- iOS开发基础控件--UIButton
01 //这里创建一个圆角矩形的按钮 02 UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 03 ...
- Delphi 三层框架开发 服务端开发
采用Delphi7+SQL2008 一.创建数据库和表 CREATE TABLE [dbo].[tb_Department]( [FKey] [uniqueidentifier] NOT NULL, ...
- Python的常见异常处理
一.异常处理 1.异常的概念 异常是错误发生的信号,一旦程序出错,并且程序没有处理这个错误,那个就会抛出异常,并且程序的运行随即终止. 2.错误种类 分两种,第一种是:语法错误,这种错误,根本过不了p ...
- C#中实例Singleton
[C#中实例Singleton] 1.经典方案: using System; public class Singleton { private static Singleton instance; p ...
- 【SPOJ - SUBLEX】Lexicographical Substring Search 【后缀自动机+dp】
题意 给出一个字符串和q个询问,每个询问给出一个整数k,输出第k大得子串. 分析 建后缀自动机,利用匹配边来解决.设d[v]为从状态v开始有多少不同的路径.这个显然是可以递推出来的.然后对于每个询问, ...
- RTX Server SDK跨服务器如何调用
1. 确认安装RTX Server SDK在开发的机器上必须确认已经安装了RTX Server SDK,并且与RTX Server的版本要一致.该计算机后面我们简称SDK计算机. 2. 步骤2 ...