android - 如何正确停止前台服务?

标签 android service foreground-service

我使用 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/

相关文章:

java - 致命异常 : android. app.RemoteServiceException Context.startForegroundService() 然后没有调用 Service.startForeground()

android - java.lang.SecurityException : Permission Denial: startForeground Android 9. 0 派 API 28

java - 相关实体的 GreenDao getter 返回空列表

android - NotifyDatasetChanged 从服务 Android

multithreading - 当多个客户端调用WCF服务时,一个或多个AppDomains在服务器端创建了吗?

android - 类和回收器 View 错误 : can't instantiate class

java - 媒体投影需要 Android Pie 和 Q 中 ServiceInfo.FOREGROUND_SERVICE TYPE_MEDIA_PROJECTION 类型的前台服务

android - 如何将我的 Android 应用程序与 Couchbase 服务器同步?

java - Android smoothScrollToPosition 无法正常工作

android - 两个给定日期之间的进度条 - Android Studio