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中一些临时数据或关键持久型数据,就需 ...
随机推荐
- php xss漏洞修复用手段和用到的一些函数
php xss漏洞修复用到的一些函数 $text = '<p>"Test paragraph".</p><!-- Comment --> < ...
- 将自己数据转化为cifar10支持的lmdb
大家都知道,在caffe里面,要运行cifar10的例子就得先由cifar10的数据库.由于caffe为了提高运行效率,减少磁盘寻道时间等,统一了数据接口(lmdb,leveldb). 首先,看一下c ...
- leetcode859
class Solution { public: bool buddyStrings(string A, string B) { if (A.length() != B.length()) { ret ...
- Spring Session 学习记录1
先写些废话 新公司项目是有用到redis,之前老公司使用的缓存框架是ehcache.我redis并不熟悉.看过介绍以后知道是个nosql..既然是个数据库,那我想操作方法和jdbc操作关系数据库应该差 ...
- git如何处理别人的pull request及解决冲突 (转)
原贴地址 出过两次了,每次都查很多资料,太蛋疼,记录在此. 当你的项目比较牛逼的时候,有人给你贡献代码,但他修改的地方恰恰你前阵子也修改了,这样在github中就不能够自动merge了. 因此你需要手 ...
- 运行Junit方法项目启动不了
从控制台看不出任何有用信息,通过JUnit右键”Copy Failure List”将信息拷贝出来 TestStart.start initializationError(org.junit.runn ...
- 【总结整理】UGC内容
除了内容了产品,还有什么适合引入UGC? :引发讨论,诱导参与,然后促成销售. User Generated Content,也就是用户生成内容的意思. 购买类产品,内容催生购买 1.为用户购买提供思 ...
- 在centos6.3_64bit 上的GO语言开发环境搭建
1.下载go安装包 http://golang.org/ go1.2.linux-amd64.tar.gz 2.配置环境变量 3.编写helloworld package main import ...
- 3-为什么很多 对 1e9+7(100000007)取模
首先有很多题目的答案是很大的,然而出题人的本意也不是让选手写高精度或者Java,所以势必要让答案落在整型的范围内.那么怎么做到这一点呢,对一个很大的质数取模即可(自行思考为什么不是小数).那么如果您学 ...
- Python学习笔记_二维数组的查找判断
在进行数据处理的工作中,有时只是通过一维的list和有一个Key,一个value组成的字典,仍无法满足使用,比如,有三列.或四列,个数由不太多. 举一个现实应用场景:学号.姓名.手机号,可以再加元素 ...