开发 APK 在澎湃 OS 上举步维艰。

39 天前
 tool2dx

我想写一个后台定时服务代码,用来 10 分钟后自动熄灭小米平板屏幕的程序。

在安卓模拟器和以前的 MIUI 系统上,运行完全没问题,一放到澎湃 OS 上,服务就老是被冻结。(以前 MIUI 内存不足是直接杀服务,由于设置了 START_STICKY ,5 秒钟后会被系统自动拉起来,包括安卓 14 模拟器也是走这个流程)

查了一下,是一个 com.miui.powerkeeper 的进程干的好事。我用 ADB 设置了 RUN_ANY_IN_BACKGROUND allow, deviceidle whitelist +[应用的包名], 电池无优化,都会随机不定时被冻结,百思不得其解。

而且如果调试程序 XML 里有后台隐私相关权限,比如 READ_CLIPBOARD_IN_BACKGROUND/GET_TASKS ,包名会被 com.miui.powerkeeper 拉黑,现象是无法弹出电池优化的按钮。解决方法是把权限去掉+换包名字。

7035 次点击
所在节点    Android
43 条回复
magicls
39 天前
试试先正向,先在什么手机管家,安全管家里面,找找入口,把自己的应用加白名单。然后 recents 里面把自己锁定。另外请求一下忽略电池优化,把自己加白。

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

@RequiresApi(api = Build.VERSION_CODES.M)
public void requestIgnoreBatteryOptimizations() {
try {
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}

这些都不行的话,再考虑 adb 那些骚操作。
minami
39 天前
tool2dx
39 天前
@magicls 试过了,好像没用,我代码里有申请这个权限。

用的是这个代码,感觉和设置里的省电策略 = 无限制是一回事。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName))
{
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
...
}
tool2dx
39 天前
@minami 我把 com.miui.powerkeeper 关掉后,运行很完美。但总觉得好奇葩,在要不要改自己代码和关闭 com.miui.powerkeeper 之间反复纠结。
tsja
39 天前
不懂安卓开发, 要开发 App, 都要针对性适配每家的定制系统吗?
tool2dx
39 天前
@tsja 自从澎湃 OS 需要 APP 备案后,应该有一个黑白名单列表给你的应用打分。分数越低,就越容易被后台冻结(我猜的)

还是怀念以前的 MIUI ,没那么多限制。
bkmi
39 天前
这个真不能怪小米,你要保活服务就按照 Android 官方的规范来申请前台服务,或者试试 JobScheduler (我估计不行);
READ_CLIPBOARD_IN_BACKGROUND 就只能怪 Google 垃圾,不给开发者一点余地,直接一刀切,我都是 Root 了用 Xposed 绕过。
minami
39 天前
@tool2dx #4 等你啥时候认识到小米的产品只配买来刷机,你就米粉入门了;等你啥时候认识到小米的产品买回来并不赚的时候,你就米粉毕业了
minami
39 天前
@bkmi 划重点,“包括安卓 14 模拟器也是走这个流程”
bkmi
39 天前
另外印象中 READ_CLIPBOARD_IN_BACKGROUND 这个权限只能系统应用申请,普通应用是无法申请的
xloger
39 天前
如果用小米自带的“自动任务”来实现呢?靠它实现按规律唤起某个 App ,然后 App 再执行某些操作?
lisongeee
39 天前
我以前在上面开发的时候,在后台新启动子线程 thread{} 里面的代码竟然不执行,需要把界面切到前台才会执行
tool2dx
39 天前
@xloger 我是通过路由器调用 adb ,来远程启动小米平板上指定 service ,唤醒 APP 不是问题,保活是个难题。

我已经准备改成在路由器定时 10 分钟,之后再调用 adb 指令了 -_-
shily
39 天前
没有提到 前台服务,开启前提服务也不行吗?
https://developer.android.com/develop/background-work/services/foreground-services?hl=zh-cn
JensenQian
39 天前
国内安卓不这么压,流氓软件,三 A 大作,塞虚幻引擎的聊天软件不然根本压不住啊
只有流氓才能打败流氓
reallittoma
39 天前
在 MIUI 上开发也难用,合理怀疑所有国产 UI 都难用。后来买了一台二手美版三星做开发机,舒服了。
GotKiCry
39 天前
@JensenQian 这你这么说不矛盾吗。现在厂商都是给虚幻聊天软件白名单
anjingdexiaocai
39 天前
现在只有提高 app 的活跃等级才行,也就是让系统认为你是处于前台,目前合规的办法只有前台服务。
JensenQian
39 天前
@GotKiCry 哈哈哈
3A 聊天软件,还得开白名单
dntilee
39 天前
我在国内工作最开心的日子是在小米写系统应用的日子,不用担心任何权限

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1089128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX