我有一个发送http请求的服务,它运行在后台,在“正常模式”下工作很好。问题是当我把我的手机放在“电池保护模式”,服务不起作用。但是,像Whatsapp这样的应用仍然有效。你知道这是怎么回事吗?
发布于 2018-04-04 01:08:18
像Whatsapp这样的移动应用程序必须请求允许,才能使它们免于Doze/电池节省和App备用模式的影响。
可以通过在设置>电池>电池优化中配置白名单来手动配置。
或者,从API 23中,您可以使用权限模型请求用户将其白名单(参见这)。在API中,您还可以通过调用isIgnoringBatteryOptimizations()来检查应用程序当前是否在白名单上
但是,您需要满足特定的标准,以使自己能够白名单。否则,当你在Google Play Store上维护应用程序时,你会遇到问题。
但是,像Whatsapp这样的信使应用大多是通过高优先级的推送通知来触发的,因此尽管没有运行后台进程,它们更有可能是活跃的。
发布于 2019-02-24 13:08:15
添加权限
<uses-permission
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>请求白名单您的应用程序
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
}
}发布于 2018-04-04 02:13:15
这些后台服务是从Marshmallow开始使用的,自奥利奥以来,除了前台使用之外,其他任何东西都不能使用。
打瞌睡模式将禁止任何操作时活动,手机将摆脱几毫秒每X小时,一些库将允许您作出一些操作在这段时间。
如果你想在打瞌睡和电池保护程序中做一些背景操作,你可能想看看JobScheduler的操作,它将在手机不打瞌睡时每15分钟或更长时间执行一次,如果您需要更频繁的操作,我建议您查看一下JobDispatcher。两者都将在走出午睡模式时执行您的任务。
https://stackoverflow.com/questions/49639229
复制相似问题