博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android应对Activity进程被杀死
阅读量:7050 次
发布时间:2019-06-28

本文共 1301 字,大约阅读时间需要 4 分钟。

hot3.png

  通常在一部Android手机里同时运行着多个应用(app),每个app对应一个系统进程,当系统需要更多的资源(如内存)而空闲资源不足时,Android系统就会选择杀掉一些低优先级的进程以便释放所需资源,这也是Android开发与PC桌面开发不同的之处。
  Android系统进程优先级的高低通常是这样判断的:
        1)如果一个app正在与用户交互,那么它所在的进程具有最高优先级;
        2)如果一个app是可见的,例如被一个对话框部分遮挡,它所在进程具有第二高的优先级;
        3)如果app当前是不可见的,也就是被切换到了后台,则它所在进程具有第三高的优先级;
        4)如果这个后台app启动了一个service,则它比一般的后台app优先级高一些;
        5)最后,如果一个进程里没有包含任何app,那么这个进程的优先级是最低;
  当系统资源严重不足时,任何一个进程都有可能被杀掉,而当用户想回到一个已经不存在于内存中的Activity时,系统只得新建一个这样的Activity对象并调用它的onCreate()方法进行恢复。因此有时就会出现如下情况:大部分时间运行正常,偶尔在切换Activity时出现空指针异常导致强制关闭,这多半是在onCreate()方法里使用了已经被重置为空的对象造成的。即使不出现异常,也会造成表单数据丢失,严重影响用户体验。
  要解决这类问题:
  1)不能抱现在手机内存大,进程一般不会被杀掉的侥幸心理,而应该以app随时都会被杀掉的态度来谨慎处理。
        2)在适当的位置将Activity所需数据进行持久化(从ram复制到rom或sd卡),并在onCreate()方法里利用这些数据恢复现场,通常包括文档类型和用户状态类型。
        对于文档类型:当用户离开当前Activity时,在onPause()方法里将当前正在编辑的文档持久化到SQLite数据库或者XML文件中,若当前Activity被杀死,可在onCreate()方法中恢复。
       对于状态类型:可通过SharedPreferences在onPanse()方法中将当前状态信息保存,比如保存某个应用的视图配置信息,若当前Activity被杀死,可在onCreate()方法中恢复,这样就可以确保一个较好的用户体验。

  注意事项:

  1)通常在onPause()里持久化而不是在onSaveInstanceState()里,是因为前者比后者更可靠,因为onSaveInstanceState()不属于Activity生命周期的一部分,在onPause()里做持久化比较方便,缺点是调用次数稍多。
        2)从Android 3.0版本开始,Activity进程在被系统杀掉之前,将保证onStop()方法先执行完成,因此如果我们开发的应用只运行在3.0以上,可以把持久化工作放在onStop()里以减少持久化的次数。
  总之一句话:在onPause()或者onStop()里持久化Activity数据,在onCreate()里恢复现场。

 

 

 

 

转载于:https://my.oschina.net/yolinfeng/blog/412811

你可能感兴趣的文章
数据库操作语句类型(DQL、DML、DDL、DCL)简介
查看>>
vmware 12中安装MAC OS X Lion 10.7
查看>>
Cloud9vue&vux上传github小步骤
查看>>
2018秋季学期学习总结
查看>>
sql server 的变量
查看>>
lxml简单用法 解析网页
查看>>
FFMPEG 源码分析(-)
查看>>
硕士论文编写工具
查看>>
samba服务配置
查看>>
【大数据系列】MapReduce示例一年之内的最高气温
查看>>
跨时代的分布式数据库 – 阿里云DRDS详解
查看>>
filezilla链接服务器出现编码错误不能链接
查看>>
Markdown
查看>>
hdu2157 How many ways??(矩阵快速幂
查看>>
学习NLPIR语义智能教学科研平台要这样打开
查看>>
P1306 斐波那契公约数
查看>>
WPF/Silverlight 终极加速方案(无反射绑定)
查看>>
shell for mysql backup in linux
查看>>
js实现23种设计模式(收藏)
查看>>
ext container的使用的场景
查看>>