gdtv
V2EX  ›  Android

作为用户,有没有办法让 app“休眠”在内存中,不占用 cpu 但又能快速打开?

  •  
  •   gdtv · Mar 13, 2018 · 16505 views
    This topic created in 3014 days ago, the information mentioned may be changed or developed.

    为了省电,为了禁止 app 在后台活动,传统方法似乎是将 app 完全关闭,清出内存,包括绿色守护、黑域、冰箱等都是这样吧? 这样虽然可以达到目的,但下次启动的时候就慢了,有没有办法禁止 app 任何后台活动但又将 app 保留在内存中呢? 前提是内存够大。

    31 replies    2018-04-02 22:56:29 +08:00
    orangeade
        1
    orangeade  
       Mar 13, 2018   ❤️ 1
    绿色守护,浅度休眠
    shihira
        2
    shihira  
       Mar 13, 2018
    kill -SIGSTOP <pid>
    creedowl
        3
    creedowl  
       Mar 13, 2018
    xposed 应用 应用控制器,设置后台墓碑
    Wicked
        4
    Wicked  
       Mar 13, 2018 via iPhone
    iOS 好像就是这样?
    esbackup
        5
    esbackup  
       Mar 13, 2018 via Android
    Xposed 模块 Per App Hacking
    huclengyue
        6
    huclengyue  
       Mar 13, 2018 via Android
    Android6.0 以上的浅度睡眠
    honeycomb
        7
    honeycomb  
       Mar 13, 2018 via Android   ❤️ 2
    Android8 (实际上是 7 )新加入的后台限制就是干这个的。
    5/6 时候就有的 doze 也是干这个的。
    iwtbauh
        8
    iwtbauh  
       Mar 13, 2018 via Android
    我认为没有必要
    因为底层 Linux 内核会进行缓存。App 的字节码和数据启动一次后就会保存在高速缓存中,第二次打开就会直接从内存中使用。
    反而使用上面说的“浅度休眠”之类方法,App 仍然会在收到 fcm 推送时被唤醒继续运行,而且在充电时也会保持唤醒
    xrui
        9
    xrui  
       Mar 13, 2018 via Android   ❤️ 1
    黑域调成只休眠,应该就可以了。就是激进的浅度休眠
    fengleidongxi
        10
    fengleidongxi  
       Mar 13, 2018
    安卓 6 以后系统自带
    honeycomb
        11
    honeycomb  
       Mar 14, 2018   ❤️ 1
    @iwtbauh 希望的是应用在不使用且无需杀进程时以“已缓存进程”的形式在内存里。

    而 oreo 的后台限制的作用和这个目的最接近:它会停掉不需要运行的 service 并防止它重新启动,阻止 alarm 等。如此,一个应用的进程里就不会有 service,那么它就比较可能处于“已缓存进程”的状态
    iwtbauh
        12
    iwtbauh  
       Mar 14, 2018 via Android
    @honeycomb 但是楼主说的是”禁止 app 任何后台活动“,是任何后台活动,据我所知这些限制不会在充电时有效,也不会禁止 fcm 推送
    gdtv
        13
    gdtv  
    OP
       Mar 14, 2018
    @Wicked IOS 确实是的
    gdtv
        14
    gdtv  
    OP
       Mar 14, 2018
    @orangeade 非常感谢,要的就是这个
    gdtv
        15
    gdtv  
    OP
       Mar 14, 2018
    @huclengyue
    @honeycomb
    @fengleidongxi
    我用的是 miui 系统,似乎没有原生系统自带的“浅度睡眠”
    gdtv
        16
    gdtv  
    OP
       Mar 14, 2018
    @honeycomb 对,我想要的就是“以已缓存进程”的形式在内存里”
    honeycomb
        17
    honeycomb  
       Mar 14, 2018 via Android   ❤️ 1
    @iwtbauh

    上述 7/8 加入的后台限制( AppOps.RUN_IN_BACKGROUND),用以限制应用进程处于 idle (和它相关的部分没有显示了一段时间,大约一分钟)时,阻止该应用的后台 service 的运行或再次启动。它不受是否处于充电状态的影响。

    受充电影响的限制是 doze 与 app standby,其它相关的有:job 可以设定为充电时触发,处于后台白名单,临时白名单时不受(或减少受到) doze/app standby 的影响

    接受 gcm 的 play service 在白名单中,所以 doze 是 gcm 也能收到,其中的高优先信息也能拉起其它因为 doze/app standby/RUN_IN_BACKGROUND 应用
    honeycomb
        18
    honeycomb  
       Mar 14, 2018 via Android   ❤️ 1
    @gdtv
    miui 的内地版本在编译时就通过一个编译选项禁用了 doze 机制,app standby 机制应该也同时被这个选项所禁用了。
    iwtbauh
        19
    iwtbauh  
       Mar 14, 2018 via Android
    iwtbauh
        20
    iwtbauh  
       Mar 14, 2018 via Android
    @iwtbauh 手抖,接上文

    RUN_IN_BACKGROUND 使 manifest 中的广播失效,也就是说**不能**禁止显式注册的广播,也就是说仍然可能会出现后台活动

    RUN_IN_BACKGROUND 禁止后台服务,但如果 app 霸占任务栏把服务固定到前台就是无效的。例如 QQ

    因此我仍然认为要想达到完全禁止后台运行,必须完全停止 App。
    honeycomb
        21
    honeycomb  
       Mar 14, 2018 via Android
    @iwtbauh
    回复被 v2 吞了。
    重写一个简单版本:
    Google 认为前台服务不是后台运行。
    这个 op 在多数情况(当然不包括 qq 那种滥用前台服务的)下的效益已经超过了强杀进程?
    广播的问题可用 ifw 解决,greenify 以 prescription 的形式做了一个可订阅规则的 wrapper
    honeycomb
        22
    honeycomb  
       Mar 14, 2018 via Android
    @iwtbauh 当然 Android 仅是强迫使用前台服务的应用显示通知,但不采取实际措施让用户拥有限制它的能力的做法也备受批评。
    huclengyue
        23
    huclengyue  
       Mar 14, 2018 via Android
    @gdtv 有的。。不过 MIUI 有一套自己的应用管理流程,所以后台的大多数都给直接杀死了,你可以关了系统的用绿色守护的来替代
    gdtv
        24
    gdtv  
    OP
       Mar 14, 2018
    @huclengyue miui 自己可以将 app 杀死,注意是杀死,清出内存,我想要的是保留在内存中,所以 miui 自带的管理功能不适合我,现在正在试用绿色守护。
    honeycomb
        25
    honeycomb  
       Mar 14, 2018 via Android
    @gdtv 小米的 appops implementation 有问题,重启后设置会丟
    huclengyue
        26
    huclengyue  
       Mar 14, 2018 via Android
    @gdtv 对啊。我就是让你关了系统的用绿色守护啊。。。
    gdtv
        27
    gdtv  
    OP
       Mar 14, 2018
    @honeycomb
    小米的 appops implementation 有问题,重启后设置会丟
    ------------------------------------------------
    对的,我也发现这个问题了,用任何 appops 类的软件都无效
    abai
        28
    abai  
       Mar 15, 2018
    然而越来越多的 app 加了开屏广告,启动再快也是白扯,像淘宝这种切换一下都要给你看个广告的就更不用说了
    gdtv
        29
    gdtv  
    OP
       Mar 15, 2018
    @guoluwei 正是因为 app 有开屏广告,才更需要将 app 休眠在内存中,在内存中的 app 会保留当前状态,再打开的时候就是先前的状态,不会出现开屏广告。
    bclerdx
        30
    bclerdx  
       Apr 2, 2018
    @honeycomb 干什么的?
    bclerdx
        31
    bclerdx  
       Apr 2, 2018
    @honeycomb 对,我感觉 O 的这个后台限制是干这个用的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   893 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 20:19 · PVG 04:19 · LAX 13:19 · JFK 16:19
    ♥ Do have faith in what you're doing.