作为用户,有没有办法让 app“休眠”在内存中,不占用 cpu 但又能快速打开? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gdtv
V2EX    Android

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

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

    为了省电,为了禁止 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 类的软件都无效
    abai
        28
    abai  
       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     Solana     2578 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 05:13 PVG 13:13 LAX 21:13 JFK 00:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86