V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jeesk
V2EX  ›  Android

android 如何手动触发回收?

  •  
  •   jeesk · 2023-02-02 11:33:28 +08:00 · 8705 次点击
    这是一个创建于 685 天前的主题,其中的信息可能已经有所发展或是发生改变。

    领导给个需求,要求应用在内存不足的时候,主动触发 activity 的回收。我们的应用是多窗口模式,类似与微信小程序的多窗口,打开 10 个可能导致内存不足, 这个时候领导非要提个需求,要求在内存不足的时候主动回收 activity, 研究了快 2 天了, 没有一点头绪。

    10 条回复    2023-02-02 17:57:35 +08:00
    kyuuseiryuu
        1
    kyuuseiryuu  
       2023-02-02 11:37:49 +08:00 via iPhone
    感觉和各种清理大师的释放内存功能差不多,能做也得 root 权限。
    learningman
        2
    learningman  
       2023-02-02 11:38:46 +08:00 via Android
    在应用里开一个 map ,存 activity 的弱引用。
    开一个计时器,定时检查剩余的 Runtime freememory ,如果不够了,就用 lru 的淘汰算法从 map 里挑一个出来,finish 掉
    jeesk
        3
    jeesk  
    OP
       2023-02-02 11:43:02 +08:00
    @learningman 老大并不想窗口关闭掉。 比如有 3 个窗口,现在内存不够用了, 暂时把后台的 2 个窗口先回收内存, 窗口得保留着,进去还得重新打开内容。
    learningman
        4
    learningman  
       2023-02-02 12:08:42 +08:00 via Android
    @jeesk 保存状态自动恢复呗
    learningman
        5
    learningman  
       2023-02-02 12:12:28 +08:00 via Android
    比如弄个空 activity 当 stub 用来保持窗口,显示内容用 fragment 来处理,内存不够就序列化一下存硬盘。
    如果连 10 个空 activity 的内存都不够,那不可能保持窗口。
    zhanglihow
        6
    zhanglihow  
       2023-02-02 16:01:08 +08:00
    主要看你 activity 用了什么东西,导致内存不足,bitmap 之类的?直接回收,要用再生成
    yawenimy122
        7
    yawenimy122  
       2023-02-02 16:10:47 +08:00
    有用户用这么耗性能的 app 吗?
    jeesk
        8
    jeesk  
    OP
       2023-02-02 16:13:27 +08:00
    @yawenimy122 这个你不用管? 反正内存绝对是不够用的。
    ChenStyle
        9
    ChenStyle  
       2023-02-02 16:35:18 +08:00
    Android 系统自动都有 LRU 回收的,不用做特别的吧。
    不然你就手动用 LRU 管理一下呗。在 application 里面做一个 Activity 的 List ,然后分配手机的部分内存,触发了就直接 Activity finish 就行了。
    jeesk
        10
    jeesk  
    OP
       2023-02-02 17:57:35 +08:00
    @ChenStyle finish 早做了。 今天测试了一下,平均每个窗口 23m 的内存,节约不到多少。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5448 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:00 · PVG 14:00 · LAX 22:00 · JFK 01:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.