这两天正在做一个既有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建立连接的时候