【问题标题】:Run background services on battery saver mode Android在节电模式 Android 上运行后台服务
【发布时间】:2018-04-03 21:13:49
【问题描述】:

我有一个发送 http 请求的服务,它在后台运行并且在“正常模式”下运行良好。问题是当我将手机置于“省电模式”时,该服务无法正常工作。但是,Whatsapp 等应用程序仍在运行。你知道发生了什么吗?

【问题讨论】:

  • 很可能,他们没有使用持续运行的服务,而是响应 GCM/FCM 推送消息。

标签: java android background-process


【解决方案1】:

Whatsapp 等移动应用程序必须请求许可才能使其免于打盹/电池节省和应用程序待机模式。

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

或者从 API 23 开始,您可以使用权限模型来请求用户将他们列入白名单(请参阅 this)。从 API 你也可以通过调用isIgnoringBatteryOptimizations()来检查你的应用当前是否在白名单中

但是,您需要满足某些criteria 才能将自己列入白名单。否则,您在 Google Play 商店中维护应用时会遇到问题。

但大多数消息应用(如 Whatsapp)是通过高优先级推送通知触发的,因此尽管没有运行后台进程,但它们更有可能处于活动状态。

【讨论】:

  • No whatsapp 不要求电池优化。他们回复 FCM 高优先级消息。
  • @NitZRobotKoder 到目前为止有什么解决方案吗?
  • @Ahmad 解决方案是依靠高优先级 FCM 获取通知,然后从您自己的服务中获取数据以显示通知或您想要从后台执行的任何其他操作。在较新的 Android 版本中,您在收到通知后确实有大约 7-8 秒的时间来完成后台任务。另外,如果可能的话,请尝试为您的应用程序获取忽略电池优化请求作为额外的安全措施。
【解决方案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);
            }
        }

【讨论】:

    【解决方案3】:

    后台服务自 Marshmallow 以来一直在开发中,自 Oreo 以来仅用于前台使用。

    打盹模式会在激活时禁止任何操作,手机每隔 X 小时会打瞌睡几毫秒,某些库会允许您在此期间进行一些操作。

    如果您想在打瞌睡和省电模式期间进行一些后台操作,您可能需要查看JobScheduler 以了解在手机未打盹时每 15 分钟或更长时间执行一次的操作,如果您需要更频繁地操作,我建议您查看JobDispatcher。退出打盹模式时,两者都会执行你的任务

    【讨论】:

      【解决方案4】:

      使用 worker 将使您的应用程序能够在打盹窗口中运行,但网络调用将被禁止。 因此,您需要请求忽略电池优化,以便您可以拨打网络电话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-06
        • 2014-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        相关资源
        最近更新 更多