停止前台服务 Android

Posted

技术标签:

【中文标题】停止前台服务 Android【英文标题】:Stop foreground service Android 【发布时间】:2018-11-11 13:06:52 【问题描述】:

我正在开发一个 android 应用程序,我在其中创建了一个前台服务。下面是杀死前台服务的代码:

private void stopForegroundService()
    
        Log.d(TAG_FOREGROUND_SERVICE, "Stop foreground service.");
        if(downloadAsyncTask!=null) //to stop async task
            downloadAsyncTask.cancel(true);

        // Stop foreground service and remove the notification.
        stopForeground(true);

        // Stop the foreground service.
        stopSelf();
     

当用户从“最近的应用程序”列表中终止应用程序时,我想停止此服务。我在服务类中有onDestroy()onTaskRemoved() 方法。从这些函数调用stopForegroundService()

当用户从最近的应用列表中终止应用时,stopForegroundService() 方法会被调用,但服务会继续运行。但是,我可以在异步任务完成后停止服务。

我有以下问题:

    当应用程序从最近的应用程序列表中被杀死时如何停止服务? 是否有可能服务被终止但异步任务继续运行?如果是,如何解决?

我将不胜感激有关此主题的任何建议和想法。谢谢。

编辑:

方法stopForegroundService()被调用,前台服务通知被移除但异步任务没有停止。如何解决这个问题?

【问题讨论】:

如果您不希望在应用程序终止后运行它,您根本不需要前台服务。此外,您可能希望为您的活动创建服务连接,一旦活动被终止,服务也将停止 感谢您的回复。如何在活动和服务之间建立联系?我正在从活动的 onDestroy 函数调用 stopForegroundService() 方法。 【参考方案1】:

好像某些线程仍然没有被正确杀死?

更新 尝试在清单文件中添加这个属性stopWithTask="true"

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

请参考这个答案。希望对您有所帮助https://***.com/a/53334788/10069542

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 how to answer 对此我深表歉意。现在我更新了我的答案。谢谢

以上是关于停止前台服务 Android的主要内容,如果未能解决你的问题,请参考以下文章

当我在 Android 设置中手动禁用位置时,为啥 Android 前台服务会停止?

为啥在 Android Oreo 上关闭屏幕时前台服务停止?

Android:更改联系人时,带有广播接收器的前台服务停止工作

如果我按下“全部清除”按钮,为啥我的前台服务会停止

Android 使用前台服务

Android 服务的限制