如何避免Activity 被杀死
我们都知道,在android系统中,内存不足的时候,系统是可以杀死任何暂停、停止或者销毁的Activity。这就意味着基本上没有在前台的Activity都会面临被关闭的可能。
Android系统之所以采用这个机制,而不是像ios系统一样采用墓碑式的管理方式,是因为这样可以在一定程度上加快应用的响应速度,但是由于以前的android手机的性能比较落后,手机运行内存RAM基本上处于2G以内,所以就会导致一些不在前台的Activity有可能被回收,但是现在的智能手机性能已经足够强悍,拿我现在的这部手机——一加手机3(6GRAM)来说,但是之前官方表示为了手机的续航,将内存机制进行修改,使得当用户打开的应用超过一定数量的时候,系统就会对一些Activity进行回收,所以重新打开这些Activity的时候,就会出现重新加载的情况,这在打开大型游戏的时候比较常见。
那我们在开发的时候如何在系统资源吃紧的时候将一些必要的数据进行及时的存储保护,避免数据的丢失呢?
我们来看官方API中给出的一个关于Activity的生命周期的图解:

如果Activity在onPause()后被杀掉,那么onStop()和onDestroy()方法就不会被调用,所以如果在onPause()方法内更多的释放Activity资源,就会让Activity在后台被系统杀掉的几率降低。
但是杀死一个Activity并不会导致它从Activity堆栈中移除,相反如果Activity实现并使用了onSaveInstanceState()方法用来自定义的保存数据,那么Activity的状态就会被保存到Bundle中,这样当Activity被重新返回的时候,onCreate()方法会被再次调用,这样刚才保存有数据的Bundle对象就会被调用,将数据重新读取;但是该方法并不能保证在任何时候都能被调用。因此我们应该在onPause()方法中保存重要的数据到永久存储(即手机硬件内存中)而用onSaveInstanceState()来保存一些可以从当前屏幕快速恢复的数据(相对不重要的数据)。
BOB
好久没有更新了,接下来会勤奋些的
如何避免Activity 被杀死的更多相关文章
- android的activity被杀死后如何重启
最近公司的大屏展示机器人上的程序运行时间长了,比如五天,十天会出现偶尔的崩溃,查日志可能是内存溢出或者是ndk层的错误,这种错误一时也不太好查找,但是产品那边有个要求就是程序退出了一定要能重启,能抓日 ...
- 第二个activity
Android四大组件 Activity BroadCastReceiver Service ContentProvider 创建第二个Activity 创建第2个Activity的过程 1. 创建c ...
- 十分钟掌握Activity的生命周期与启动模式
1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...
- Android 四大组件之一(Activity)
Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启 ...
- Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法:
Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用: Activity的 onSaveInstan ...
- 如何提高Service的优先级避免被杀死或者杀死后如何再次重启Service?
2014-01-21 16:45:02 我们知道,当进程长期不活动时,如果系统资源吃紧,会杀死一些Service,或不可见的Activity等所在的进程. 如何避免Service被系统杀死,随便在网上 ...
- Android 组件系列-----Activity保存状态
本篇随笔将详细的讲解Activity保存状态的概念,也就是saving activity state. 一.Activity状态保持概念 保存Activity的状态是非常重要的,例如我们在玩一个游戏的 ...
- 深入了解Activity-生命周期
一 介绍 Activity是android中使用最为频繁的组件,在官方文档中是这样描述的:An activity is a single, focused thing that the user ca ...
- Android基础总结(2)——活动Activity
1.什么是活动(Activity) 活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见. 2.怎么使用 ...
随机推荐
- [c++] Collection of key and difficult points
Operator Overload 1. 在重载下标运算符时(数组符号):不可重载为友元函数,必须是非static类的成员函数. why 2. overload ++ 时,如果是: int a; ...
- Axure RP介绍
1.什么是原型设计?产品原型设计(Prototype Design)最基础的工作,就是结合批注.大量的说明以及流程图画框架图WireFrame,将自己的产品原型完整而准确的表述给 UI.UE.程序工程 ...
- Appium移动自动化测试(四)--one demo
继续更新. -------------------------------------------- 第四节 安装Appium Client Appium Client是对webdriver原生ap ...
- Python3.x中bytes类型和str类型深入分析
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- 我写的一个ExcelHelper通用类,可用于读取或生成数据
读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...
- AFNetworking 原作者都无法解决的问题: 如何使用ip直接访问https网站?
背景 最近App似乎有报异常是DNS无法解析,尝试解决此问题.搜集到的资料很少,甚至连AFN原作者都判定这可能是一个无解的问题,参见: https://github.com/AFNetworking/ ...
- [ShortCut] Visual Studio快捷键
msdn官方快捷键说明:https://msdn.microsoft.com/zh-cn/library/da5kh0wa.aspx 测试工具: visual studio 2013 操作步骤: 1. ...
- ok6410 android driver(10)
From this essay, we go to a new discussion "Android Hardware Abstraction Layer". In this e ...
- 三分 --- ZOJ 3203 Light Bulb
Light Bulb Problem's Link: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3203 Mean: ...
- SQLServer根据不同前缀生成多套流水号
--种子表 --@prefix 前缀 --@seed 种子值 create table RefNoSeed( prefix ) unique, seed int ) go --测试表 --@inser ...