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

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

  •  
  •   gdtv · 195 天前 · 3625 次点击
    这是一个创建于 195 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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