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

android oreo 终于可以管理后台了

  •  
  •   athanos · 2017-08-22 12:36:58 +08:00 · 16606 次点击
    这是一个创建于 2649 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在电池里终于可以为每个程序设置后台权限。实测微信留的三个活动后台都被系统干掉了。
    33 条回复    2017-08-25 20:37:28 +08:00
    EricCartman
        1
    EricCartman  
       2017-08-22 12:40:01 +08:00
    之前也有,不过隐藏了
    cybermonster
        2
    cybermonster  
       2017-08-22 13:17:17 +08:00   ❤️ 9
    到时候会出现不让你管理,否则不给用微信的情况
    cloverfisher
        3
    cloverfisher  
       2017-08-22 13:29:01 +08:00   ❤️ 1
    一直都有吧,只是很多程序你禁了一个权限,程序就不让你打开了。
    honeycomb
        4
    honeycomb  
       2017-08-22 15:10:39 +08:00 via Android
    @cybermonster 这件事不会发生,因为微信找不到此相关的信息,具体看源代码。

    @cloverfisher 这个机制从 7.0 才有,但那个时候的入口只有一个 appops 项目,并且具体实现有一处低级 bug,直到 8.0 dp4 才改正
    nieyujiang
        5
    nieyujiang  
       2017-08-22 15:11:24 +08:00
    TX:亲爱的用户你好,我是你爹
    leekafai
        6
    leekafai  
       2017-08-22 15:34:47 +08:00 via Android
    可是,作为一个通讯软件,驻后台有啥问题
    cunkouwdy007
        7
    cunkouwdy007  
       2017-08-22 15:39:56 +08:00
    只是刚更新系统还没跟上
    估计过段时间更新版本之后就修复不能后台的 BUG 了
    cloverfisher
        8
    cloverfisher  
       2017-08-22 16:43:42 +08:00
    @honeycomb 抱歉,我说的一直都有其实就指的 7.0.。用词不当^_^。其实有没有差不多,反正你关了某些服务,要么是死活不让你打开,要么是每次打开都要弹窗。
    chinvo
        9
    chinvo  
       2017-08-22 16:46:47 +08:00
    @leekafai #6 别家 IM 也没见驻后台的啊,都是走系统的推送
    leekafai
        10
    leekafai  
       2017-08-22 16:53:31 +08:00 via Android
    @chinvo play 里的微信用的 gcm 啊
    silencefent
        11
    silencefent  
       2017-08-22 17:01:53 +08:00
    安卓难道 8.0 了还不能控制下载吗
    备机打开一些应用,点到一些误触的位置,不能控制下载这么多年了,还得靠第三方来解决,国外的环境就那么纯洁,没有诱导误触的 app?
    daozhihun
        12
    daozhihun  
       2017-08-22 17:04:23 +08:00
    @leekafai 有 GCM 模块但没用。我的手机支持 GCM,很多推送也走的 GCM,但是微信关掉进程后就收不到了。
    athanos
        13
    athanos  
    OP
       2017-08-22 17:15:59 +08:00 via Android
    @daozhihun 似乎要 play 上下载的版本?总之在 oreo 里控制了后台之后还是收得到消息。
    920678778
        14
    920678778  
       2017-08-22 17:24:23 +08:00
    @chinvo 关键是 GCM 在国内不灵啊!!!
    chinvo
        15
    chinvo  
       2017-08-22 17:32:07 +08:00
    @athanos 所以明明有 GCM 为啥非要再常驻一个
    mario85
        16
    mario85  
       2017-08-22 17:35:34 +08:00 via Android
    @leekafai 据说微信的 gcm 是为了拉起应用而不是推送。恶心之处可见一斑。
    EricCartman
        17
    EricCartman  
       2017-08-22 17:57:54 +08:00 via Android
    @silencefent 对,广告都是导向 Googleplay 的
    chinawrj
        18
    chinawrj  
       2017-08-22 20:23:51 +08:00
    @leekafai lz 只是想要禁用后台,并不是质疑微信后台的合理性。
    ysc3839
        19
    ysc3839  
       2017-08-22 21:36:46 +08:00 via Android
    @920678778 我这里是可以直连 GCM 的
    czmecho
        20
    czmecho  
       2017-08-22 21:43:01 +08:00 via iPhone
    推送问题解决了大半,不过滥用权限问题还是没解决。
    chnyang
        21
    chnyang  
       2017-08-22 23:50:43 +08:00 via Android
    @czmecho
    @ysc3839
    @chinawrj
    @chinvo
    @EricCartman
    @daozhihun

    楼上的这么多位,我想问问你们关后台只靠推送,那冷启动微信不会很慢吗?不懂求问
    athanos
        22
    athanos  
    OP
       2017-08-22 23:52:37 +08:00 via Android
    @chnyang 禁用了之后仍然收得到消息,而且并没有清除出内存,cache 里还有。 @honeycomb 看过源码,应该知道到底是怎么一回事。
    ysc3839
        23
    ysc3839  
       2017-08-23 00:00:48 +08:00
    @chnyang 我之前用 LineageOS 的时候并没有关掉微信的后台,怕错过什么通知。不过微信启动确实很慢,点了图标后卡至少 2 秒才出现界面,有时候会显示地球界面,又要等 5 秒。其他应用都没有这种状况,QQ 点图标都是秒开,企鹅界面也没出现过超过 3 秒的情况……
    honeycomb
        24
    honeycomb  
       2017-08-23 00:26:37 +08:00   ❤️ 1
    @athanos
    我也发现有这个问题

    微信在 7.1.2 里被杀得很爽快,但在 8.0.0 似乎不会被杀掉 service

    oasisfeng 提出的 issue report:
    https://issuetracker.google.com/issues/62480012

    实际对应的问题早在 16 年 11 月就提交了,但 Google 无视了它
    https://issuetracker.google.com/issues/37126419


    修复的版本
    stopInBackgroundLocked(int uid)

    确实按照 37126419 的建议,把 stopping.add(service)移到 if 语句之外

    https://android.googlesource.com/platform/frameworks/base/+/android-8.0.0_r4/services/core/java/com/android/server/am/ActiveServices.java
    honeycomb
        25
    honeycomb  
       2017-08-23 00:36:41 +08:00   ❤️ 1
    但确实可以在 8.0.0 看到系统杀死微信的 service 的报告

    I/ActivityManager(1031): Process com.tencent.mm:tools (pid 7111) has died: fore RCVR
    W/ActivityManager(1031): Stopping service due to app idle: u0a128 -1m32s154ms com.tencent.mm/.booter.CoreService
    W/ActivityManager(1031): Stopping service due to app idle: u0a128 -1m20s538ms com.tencent.mm/.booter.NotifyReceiver$NotifyService


    看上去这一套配合绿色守护的浅睡有一定效果,GCM 有的时候能把微信拉起来
    EricCartman
        26
    EricCartman  
       2017-08-23 01:04:49 +08:00
    @czmecho #20 appops 可以解决
    skylancer
        27
    skylancer  
       2017-08-23 01:40:55 +08:00
    @daozhihun 关掉进程当然收不到,因为
    1. 请看 GCM 实现
    2. 微信并不是(用)高优先级
    zhxhwyzh14
        28
    zhxhwyzh14  
       2017-08-23 08:20:50 +08:00 via Android
    电池里怎么设置的后台权限呀?
    dong3580
        29
    dong3580  
       2017-08-23 08:30:04 +08:00 via Android
    微信好像不给 GPS 不让用,有意思,
    honeycomb
        30
    honeycomb  
       2017-08-23 09:29:03 +08:00 via Android
    @dong3580 用 appops 治它
    xingda920813
        31
    xingda920813  
       2017-08-23 10:27:36 +08:00
    @cybermonster
    @honeycomb
    [到时候会出现不让你管理,否则不给用微信的情况]
    -----------------------------------------------------
    App 可以检测到 op RUN_IN_BACKGROUND 是否被 ignore / deny.

    final int OP_RUN_IN_BACKGROUND = 63;
    int mode = (int) AppOpsManager.class
    .getMethod("checkOp",
    int.class,
    int.class,
    String.class)
    .invoke(getSystemService(AppOpsManager.class),
    OP_RUN_IN_BACKGROUND,
    Binder.getCallingUid(),
    getPackageName());
    System.out.println(mode);

    targetSdkVersion 23 的 Legacy 应用, 上面的代码安装上时返回 0 (MODE_ALLOWED), adb 设为 ignore 后返回 1 (MODE_IGNORED), 设为 deny 后抛出 java.lang.SecurityException: com.company.test from uid 10172 not allowed to perform RUN_IN_BACKGROUND.
    EmmaSwan
        32
    EmmaSwan  
       2017-08-24 03:19:59 +08:00
    谷歌还是对流氓软件太仁慈了。不给权限不让用的,直接全球 PLAY 下架,让它永远呆在天朝就好了
    honeycomb
        33
    honeycomb  
       2017-08-25 20:37:28 +08:00
    @xingda920813
    是的
    如果出现那种情况就卸载吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:42 · PVG 21:42 · LAX 05:42 · JFK 08:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.