2 young soul young_soul 于 2014.08.18 09:37 提问

android内存不足,系统杀死进程,如果在此之前准确知道快被回收?

各位大神:
情况是这样的,应用长时间切后台,会被系统杀掉,然而系统会记住被杀死时的那个activity,而因为上下文所有变量已经丢失,如果单纯新建这样一个activity也是没有太大意义的,所以我的思路是:希望在系统杀死当前进程之前可以捕获到消息,然后在当前应用生命周期内,主动将自己杀死,这样就相当于主动退出应用,下次进来就是重新进入了。
查阅相关资料,Android本身提供一些方法,onLowMemory和onTrimMemory方法,但是onLowMemory是杀死之后才会通知,这样也就没有意义,onTrimMemory是4.0之后给出的方法,通过区分level来通知应用当前系统内存对当前应用的一些即将进行的动作(比如马上回收)。
TRIM_MEMORY_COMPLETE:内存不足,并且该进程在后台进程列表最后一个,马上就要被清理
TRIM_MEMORY_MODERATE:内存不足,并且该进程在后台进程列表的中部。
TRIM_MEMORY_BACKGROUND:内存不足,并且该进程是后台进程。
TRIM_MEMORY_UI_HIDDEN:内存不足,并且该进程的UI已经不可见了。

应该使用TRIM_MEMORY_COMPLETE,但我尝试了,如果在application中复写此方法,当虚拟机反馈TRIM_MEMORY_COMPLETE时,时机不是很准确,有时候进程还没有即将被回收,就已经收到这个level了,所有我没有了思路。
可能我的思路本身就不是对的,希望各位大神给出建议,帮助我解决这个问题,由衷感谢!

2个回答

kuizhaoyi
kuizhaoyi   2015.09.15 13:45

TRIM_MEMORY_COMPLETE这个监听的时候有时候监听不到,建议监听TRIM_MEMORY_MODERATE,在这个里面处理退出程序操作。

yaocai321
yaocai321   2015.10.10 15:01

lz 解决问题了吗????

Csdn user default icon
上传中...
上传图片
插入图片