我开发了一个运行后台服务的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;当我将此权限切换为开启时,它会按我的意愿开始工作。我怎样才能将此权限或其他任何内容提供给我的申请,这样服务就不会被杀死?
答案 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>