我有一个服务,用于发送在后台运行的http请求,并在“正常模式”下正常工作。问题是当我将手机置于“省电模式”时,该服务无法正常工作。但是,像Whatsapp这样的应用仍然有效。你知道发生了什么吗?
答案 0 :(得分:7)
可以通过在设置>中配置白名单来手动配置此功能。电池>电池优化。
或者从API 23开始,您可以使用权限模型来请求用户将它们列入白名单(请参阅this)。来自API您还可以致电isIgnoringBatteryOptimizations()
,检查您的应用当前是否在白名单上但是,您需要满足某些criteria才能将自己列入白名单。否则,您在Google Play商店中维护应用时会遇到问题。
但主要是Whatsapp等信使应用程序是通过高优先级推送通知触发的,因此尽管没有运行后台进程,但它们更有可能处于活动状态。
答案 1 :(得分:2)
添加权限
<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);
}
}
答案 2 :(得分:0)
自Marshmallow以来,后台服务正在进行中,除了Oreo以外的其他任何东西都不能用于前台使用。
打盹模式将禁止任何操作,活动时,手机将每隔X小时从少数女士打瞌睡,一些图书馆将允许您在此期间进行一些操作。
如果你想在打瞌睡期间做一些背景操作。电池保护程序您可能需要查看JobScheduler操作,该操作将在手机未打盹时每15分钟或更长时间执行一次,如果您需要更频繁的操作,我建议您查看一下在JobDispatcher。两者都将在退出打盹模式时执行您的任务
答案 3 :(得分:0)
使用 worker 将使您的应用程序能够在瞌睡窗口中运行,但将禁止网络调用。 因此,您需要请求忽略电池优化,以便您可以拨打网络电话。