young_soul 2014-08-18 01:37 采纳率: 0%
浏览 6976

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 2015-09-15 05:45
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮