在终止应用程序后保持后台服务运行

时间:2017-12-14 11:44:04

标签: android background-service long-running-processes

我开发了一个运行后台服务的android应用程序,即使应用程序被用户杀死或出于某种原因,我也需要该服务才能保持活动状态。我已经实现了服务并在onStartCommand方法中添加了返回START_STICKY,如下所示:

public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    Log.d("my_state","On start command");

    return START_STICKY;
}

我也在AndroidManifest.xml中定义了这样的服务:

    <service android:name=".MeterDistanceCalcService"
        android:exported="true"
        android:enabled="true"
        android:stopWithTask="false"
        >

        <intent-filter>
            <action android:name="LONGRUNSERVICE" />
        </intent-filter>

    </service>

我注意到在旧的Android版本上,比如android 4.4.2,它工作正常并且服务保持活跃,但在某些具有android 6.0的设备上,它不起作用。该设备是华为,

- 设置 - &gt;应用 - &gt; (我的APP) - &gt; Battary

我找到了许可&#34;屏幕关闭后继续运行&#34;当我将此权限切换为开启时,它会按我的意愿开始工作。我怎样才能将此权限或其他任何内容提供给我的申请,这样服务就不会被杀死?

enter image description here

1 个答案:

答案 0 :(得分:1)

Developer's documentation表示您可以使用以下属性实现此行为:

 android:isolatedProcess="true"

OR

 android:stopWithTask="false"

或使用两者

如果资源是恐慌,

START_STICKY将被忽略。

使用android:stopWithTask="false"不允许任务被关闭,即使应用程序被销毁

例如:

<service
        android:name=".ServiceName"
        android:process=":MYPROCESS"
        android:isolatedProcess="true"
        android:stopWithTask="false">
            <intent-filter>
                 <action android:name="PackageName.ServiceName" />
            </intent-filter>
  </service>