我使用 startForeground 使我的服务在后台“持久化”并且不会被操作系统杀死。
我通过调用 stopForeground 和 stopService 删除主 Activity onDestroy 方法中的服务。
问题是,当我将我的应用程序从最近的应用程序中删除以终止它时,调试 session 仍在运行,而在“正常”运行(不使用 startForeground)时,调试 session 正确终止。
使用 adb shell 确认应用程序仍在运行。
startForeground 以某种方式创建了一个“特殊”运行线程,无法通过简单地停止前台和服务来停止。
有什么想法吗?
最佳答案
如果你想在清除你的应用程序的最近任务时停止你的服务,你必须在 list 文件中为服务定义一个属性stopWithTask
,如下所示
<service
android:enabled="true"
android:name=".ExampleService"
android:exported="false"
android:stopWithTask="true" />
然后你可以重写服务中的onTaskRemoved方法,当应用程序的任务被清除时会调用它
@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
//do something you want
//stop service
this.stopSelf();
}
关于android - 如何正确停止前台服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53334235/