1
honeycomb 2017-08-16 13:51:16 +08:00 via Android
很残酷地,可能是的。
如果系统是 android7.0 或更高版本,尝试用 appops 的 RUN_IN_BACKGROUND 项辅助一下 |
2
lfk0000 2017-08-16 14:13:03 +08:00
没 xposed 的绿色守护都已经够弱鸡的了。。。你这还没 root。。。
试试黑域的 adb 模式吧 |
3
miaomiao888 2017-08-16 15:14:01 +08:00
把那些国产都换成 PLAY 版试试?
|
4
66beta 2017-08-16 15:16:00 +08:00
卸载了黒域,每天到公司插上充电(下班保持 100%),再也没有这么多烦恼了~~
|
5
standin000 OP @lfk0000 绿色守护我也用了 adb,黑狱会比绿色守护好在哪里?
|
6
honeycomb 2017-08-16 17:15:20 +08:00
@standin000
绿色守护的作者在 bugreport 列出了一些常见的保活措施: https://issuetracker.google.com/issues/62480012 " 1. Restart the service with a frequent periodic alarm (less than 5 minutes), causing the service being stopped and started again and again. (same applied to JobScheduler and SyncAdapter) 2. Restart the service inside its Service.onDestroy(), reviving the service immediately upon stopping. 3. Raise the background service to foreground service, when the screen is off to dodge from observation by user. 4. Bind to each other within 2 services, to fool the activity manager to consider them as bound services. 5. Restart service from JNI native library with "am start-service". " 我觉得比较可能是通过另一个应用的 SDK 发出 expilcit Intent 启动,或者 Sync/Job 的方式,它们都能绕过 Force Close 有 Android 7 的话,RUN_IN_BACKGROUND 应该能对付这里的所有情况 然而如这个 bug report 所说,7~7.1 的这个实现有 bug(直到 Android 8 DP4 修复),只会杀进程的第一个 service |
7
honeycomb 2017-08-16 17:17:17 +08:00
Sync/Job 的话仅仅是系统进入任何一级的 doze/应用被 app standby 就会被推迟到下一个维护窗口
|
8
standin000 OP @honeycomb 谢谢,我打开了唤醒追踪,发现它是被 KeepAliveJobService 启动,请问有办法屏蔽吗?
|
9
honeycomb 2017-08-17 14:21:16 +08:00
@standin000
根据 https://android.googlesource.com/platform/frameworks/base/+/bef28feba57be7fd6a4d14a85a8229154338b2ed%5E%21/ 有 Android 7+ 的话,AppOps 的 RUN_IN_BACKGROUND 确定能对付这个问题 “ All jobs for the app are cancelled and no more can be scheduled.” 使用 AppOps 无需 root,只要有 adb 就可以用 这些软件把 adb 模式给包装好了: https://www.coolapk.com/apk/com.zzzmode.appopsx https://www.coolapk.com/apk/rikka.appops 如果没有 Android7+,就要有 root 权限,可以使用这些方法: 通过 pm disable 注销 KeepAliveJobService 具体: https://www.coolapk.com/apk/cn.wq.myandroidtools 通过增加一项 IFW 的规则阻止 KeepAliveJobService 被调用 具体: 绿色守护的处方特性 强制把应用设置为 app standby 具体: 绿色守护改用 shallow hibernate 模式(这个可能没意义,你终究是希望把它的 service 杀掉,进程可以保留) 如果没有 Android7,也没有 root,那就要用 brevent,它会混合使用 app standby+FC,效果至少比绿色守护好一些 |
10
standin000 OP @honeycomb 谢谢回答,我用的是 android 6,现在已经改装黑域了,开了 adb,但是我的权限禁止记录上仍然有触宝电话的读取本机识别码的记录,不过黑域里没有它出现的记录,不知道它是否在耗电。
|
11
honeycomb 2017-08-21 10:59:41 +08:00 1
@standin000 可以抓一下 bugreport,用 battery historian v2(需要 docker,docker 官方库里有提供其镜像,无需自行编译)检查应用到底消耗了多少 CPU 时间,wakelock 等
源代码工程: https://github.com/google/battery-historian 也可以用 wakelock detector (lite),手动给它 adb grant android.permission.DUMP 权限也可 |