首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在电池保护程序模式Android上运行后台服务

问在电池保护程序模式Android上运行后台服务
EN

Stack Overflow用户
提问于 2018-04-03 21:13:49
回答 4查看 8.6K关注 0票数 11

我有一个发送http请求的服务,它运行在后台,在“正常模式”下工作很好。问题是当我把我的手机放在“电池保护模式”,服务不起作用。但是,像Whatsapp这样的应用仍然有效。你知道这是怎么回事吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-04 01:08:18

像Whatsapp这样的移动应用程序必须请求允许,才能使它们免于Doze/电池节省和App备用模式的影响。

可以通过在设置>电池>电池优化中配置白名单来手动配置。

或者,从API 23中,您可以使用权限模型请求用户将其白名单(参见这)。在API中,您还可以通过调用isIgnoringBatteryOptimizations()来检查应用程序当前是否在白名单上

但是,您需要满足特定的标准,以使自己能够白名单。否则,当你在Google Play Store上维护应用程序时,你会遇到问题。

但是,像Whatsapp这样的信使应用大多是通过高优先级的推送通知来触发的,因此尽管没有运行后台进程,它们更有可能是活跃的。

票数 10
EN

Stack Overflow用户

发布于 2019-02-24 13:08:15

添加权限

代码语言:javascript
复制
<uses-permission 
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

请求白名单您的应用程序

代码语言:javascript
复制
 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);
            }
        }
票数 8
EN

Stack Overflow用户

发布于 2018-04-04 02:13:15

这些后台服务是从Marshmallow开始使用的,自奥利奥以来,除了前台使用之外,其他任何东西都不能使用。

打瞌睡模式将禁止任何操作时活动,手机将摆脱几毫秒每X小时,一些库将允许您作出一些操作在这段时间。

如果你想在打瞌睡和电池保护程序中做一些背景操作,你可能想看看JobScheduler的操作,它将在手机不打瞌睡时每15分钟或更长时间执行一次,如果您需要更频繁的操作,我建议您查看一下JobDispatcher。两者都将在走出午睡模式时执行您的任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49639229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档