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

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

  •  
  •   gdtv · 2018-03-13 16:31:39 +08:00 · 12200 次点击
    这是一个创建于 2450 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    而 oreo 的后台限制的作用和这个目的最接近:它会停掉不需要运行的 service 并防止它重新启动,阻止 alarm 等。如此,一个应用的进程里就不会有 service,那么它就比较可能处于“已缓存进程”的状态
    iwtbauh
        12
    iwtbauh  
       2018-03-14 11:19:40 +08:00 via Android
    @honeycomb 但是楼主说的是”禁止 app 任何后台活动“,是任何后台活动,据我所知这些限制不会在充电时有效,也不会禁止 fcm 推送
    gdtv
        13
    gdtv  
    OP
       2018-03-14 11:29:03 +08:00
    @Wicked IOS 确实是的
    gdtv
        14
    gdtv  
    OP
       2018-03-14 11:29:17 +08:00
    @orangeade 非常感谢,要的就是这个
    gdtv
        15
    gdtv  
    OP
       2018-03-14 11:30:00 +08:00
    @huclengyue
    @honeycomb
    @fengleidongxi
    我用的是 miui 系统,似乎没有原生系统自带的“浅度睡眠”
    gdtv
        16
    gdtv  
    OP
       2018-03-14 11:31:43 +08:00
    @honeycomb 对,我想要的就是“以已缓存进程”的形式在内存里”
    honeycomb
        17
    honeycomb  
       2018-03-14 11:33:08 +08:00 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  
       2018-03-14 11:35:06 +08:00 via Android   ❤️ 1
    @gdtv
    miui 的内地版本在编译时就通过一个编译选项禁用了 doze 机制,app standby 机制应该也同时被这个选项所禁用了。
    iwtbauh
        19
    iwtbauh  
       2018-03-14 11:45:59 +08:00 via Android
    iwtbauh
        20
    iwtbauh  
       2018-03-14 11:49:08 +08:00 via Android
    @iwtbauh 手抖,接上文

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

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

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