Android 应用进程生命周期及static的生命周期引发的问题及解决思路

在开发Android服务和前台进程应用时遇到DeadObjectException异常及UI更新问题。问题出现在Service与前台进程交互时,有时UI无法更新。研究发现,问题与进程生命周期和static变量有关。当通过BACK键退出应用时,进程并未被杀死,static资源未得到释放。解决方案是确保在与Service建立连接时重新初始化static资源。此外,了解Android中BACK键不会导致进程退出,而缩小界面删除APP则会彻底杀死进程。使用ADT Device View有助于监控进程和线程状态。
摘要由CSDN通过智能技术生成

这两天正在做一个既有Service又有前台进程APP的程序,遇到如下奇怪问题:

1. 时常出现DeadObjectException异常。

2. 前台进程在通过Service完成耗时任务后,进行UI更新,比如设置button的背景色,Clickable状态等。但这个时候,偶尔可以更新成功,偶尔不成功。

对于问题1,网上的信息都提到是因为Service挂掉了,所以前台APP持有的是已经die的binder代理。但是,我通过ADT的Device view中,看到Service进程一直存在。

对于问题2,搜遍整个网络,都没有人遇到过类似问题。

在百思不得其解的情况下,突然发现了一个规律:

    每次用手机缩小界面的情况下,删除前台APP之后,再重启APP,上述两个问题都未出现。但通过Back键退出前台APP的时候,就会必现上述问题。

通过ADT的Device view发现,通过缩略界面删除APP时,进程将被杀掉。通过BACK键时,进程不会杀掉。

通过上述分析,初步得出结论,可能和资源释放有关系。因为通过ADT 的Device View可以看到很多线程还在继续运行。

大家都知道,Android APP的所有资源都是放在进程中的,APP退出时,有哪些资源不会释放呢?我猜测,所有Class等全局资源不会释放,这样下次重启APP时,速度会很快。

通过验证,发现所有static资源也不会释放。我的问题就出在这里,每次用户按BACK键后,没有释放静态资源,特别是和Sevice绑定相关的资源。这些资源应该在每次和Service建立连接的时候

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值