打ze模式-前台服务是否继续运行?

时间:2019-07-03 09:17:46

标签: android android-service android-doze

我很困惑reading this,并试图弄清楚当设备进入深度打ze模式时前台服务是否将运行。有人可以澄清。我想知道棉花糖和棉花糖是否可以继续运行。我一直以为设备休眠时所有线程都将被挂起,即使是前台服务也是如此。

我看到doze mode restrictions,但前台服务什么都没有。如果我的服务超过打ze模式安全设置,我会很困惑。

据我所知,在打ze模式限制下,仅网络呼叫停止了。但是可以说我正在做一些长时间运行的主线程工作,这意味着它可以继续正常运行吗?即使在打ze睡模式下?

2 个答案:

答案 0 :(得分:1)

打ze模式用于节省电池电量。您应该将您的应用列入白名单以停用打ze模式。

来源:https://developer.android.com/training/monitoring-device-state/doze-standby

  

对其他用例的支持       几乎所有应用程序都应该能够通过管理网络连接,警报,作业和正确同步以及使用FCM来支持Doze。   高优先级消息。对于少数用例,这可能不会   足够。对于此类情况,系统提供了可配置的   部分免于Doze和App Standby的应用程序的白名单   优化。

An app that is whitelisted can use the network and hold partial wake locks during Doze and App Standby. However, other restrictions
     

仍然适用于列入白名单的应用程序,就像对其他应用程序一样。对于   例如,列入白名单的应用的工作和同步被推迟(在API上   23级及以下),并且常规的AlarmManager警报不会触发。   应用可以通过以下方法检查其当前是否在免除白名单中   调用isIgnoringBatteryOptimizations()。

在这里,如何将您的应用插入白名单: 1.步骤->在您的xml文件中添加此权限。

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

2。步骤İgnore电池优化

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);
    }
}

答案 1 :(得分:1)

前台服务不会在休眠模式下终止,这是覆盖休眠模式的一种很好的解决方法。 终止前台服务在很大程度上取决于Mobile OS。 像夏威夷一样,它会在一段时间后终止前台服务,因此您将无法确定时间段。 如果其他一些电话检测到意外的电池消耗,则会终止最旧的前台服务。 去年,我花了大约6个月的时间观察手机是否在打do模式激活或不激活时杀死前台服务。 因此,我尝试了一种以上的解决方案来覆盖打override模式,即每10秒检测一次位置,最好的一种是前台服务。 因此,在某些手机上您将面临意外的行为,但这是打ze睡和待机模式的最佳解决方案。 您可以看到此article 您还可以查看此tutorial