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

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,在这个里面处理退出程序操作。

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?