java安卓结束进程_Android应对Activity进程被杀死

本文探讨了Android系统如何根据应用活跃度调整进程优先级,并强调了正确处理Activity数据持久化的重要性,以防因进程被杀导致数据丢失。建议在onPause()或onStop()时存储数据,在onCreate()时恢复,以提升用户体验。
摘要由CSDN通过智能技术生成

通常在一部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()里恢复现场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值