领导给个需求,要求应用在内存不足的时候,主动触发 activity 的回收。我们的应用是多窗口模式,类似与微信小程序的多窗口,打开 10 个可能导致内存不足, 这个时候领导非要提个需求,要求在内存不足的时候主动回收 activity, 研究了快 2 天了, 没有一点头绪。
1
kyuuseiryuu 2023-02-02 11:37:49 +08:00 via iPhone
感觉和各种清理大师的释放内存功能差不多,能做也得 root 权限。
|
2
learningman 2023-02-02 11:38:46 +08:00 via Android
在应用里开一个 map ,存 activity 的弱引用。
开一个计时器,定时检查剩余的 Runtime freememory ,如果不够了,就用 lru 的淘汰算法从 map 里挑一个出来,finish 掉 |
3
jeesk OP @learningman 老大并不想窗口关闭掉。 比如有 3 个窗口,现在内存不够用了, 暂时把后台的 2 个窗口先回收内存, 窗口得保留着,进去还得重新打开内容。
|
4
learningman 2023-02-02 12:08:42 +08:00 via Android
@jeesk 保存状态自动恢复呗
|
5
learningman 2023-02-02 12:12:28 +08:00 via Android
比如弄个空 activity 当 stub 用来保持窗口,显示内容用 fragment 来处理,内存不够就序列化一下存硬盘。
如果连 10 个空 activity 的内存都不够,那不可能保持窗口。 |
6
zhanglihow 2023-02-02 16:01:08 +08:00
主要看你 activity 用了什么东西,导致内存不足,bitmap 之类的?直接回收,要用再生成
|
7
yawenimy122 2023-02-02 16:10:47 +08:00
有用户用这么耗性能的 app 吗?
|
8
jeesk OP @yawenimy122 这个你不用管? 反正内存绝对是不够用的。
|
9
ChenStyle 2023-02-02 16:35:18 +08:00
Android 系统自动都有 LRU 回收的,不用做特别的吧。
不然你就手动用 LRU 管理一下呗。在 application 里面做一个 Activity 的 List ,然后分配手机的部分内存,触发了就直接 Activity finish 就行了。 |