领导给个需求,要求应用在内存不足的时候,主动触发 activity 的回收。我们的应用是多窗口模式,类似与微信小程序的多窗口,打开 10 个可能导致内存不足, 这个时候领导非要提个需求,要求在内存不足的时候主动回收 activity, 研究了快 2 天了, 没有一点头绪。
![]() | 1 Chemist 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 就行了。 |