21

我正在开发一个音乐应用程序,我想在用户从最近列表中删除应用程序时停止服务,而不是在第一个活动被破坏时停止服务(因为当用户点击返回直到应用程序最小化时,在这种情况下第一个活动也是被摧毁)。请帮忙。

4

3 回答 3

51

当用户从最近列表中删除应用程序时,我想停止服务。

是的,您可以使用清单文件中的服务stopWithTask标志来执行此操作。true

例子:

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

或者

如果您需要从最近列表中删除应用程序的事件,并在停止服务之前做一些事情,您可以使用这个:

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

所以你的服务的方法onTaskRemoved将被调用。(请记住stopWithTask,如果您设置为,它将不会被调用true)。

public class MyService extends Service {

    @Override
    public void onStartService() {
        //your code
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        System.out.println("onTaskRemoved called");
        super.onTaskRemoved(rootIntent);
        //do something you want
        //stop service
        this.stopSelf();
    }
}

希望这可以帮助。

于 2014-12-16T06:14:12.663 回答
2

最后一个答案对我不起作用(我使用的是 API 29)。我在onTaskRemoved函数的 Javadoc 中查找并看到以下指令:“如果您设置了 {android:stopWithTask},那么您将不会收到此回调;相反,服务将被简单地停止。”

所以,我要做的就是从清单中删除这一行 (android:stopWithTask="false"),它工作得很好。

这是清单文件中的更新代码:

<service
android:enabled="true"
android:name=".ExitService"
android:exported="false"/>
于 2020-08-22T18:03:10.637 回答
0

我发布了这个答案,因为选择的最佳解决方案对我不起作用。

这是更新版本:

首先创建这个服务类:

 public class ExitService extends Service {


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        System.out.println("onTaskRemoved called");
        super.onTaskRemoved(rootIntent);
        //do something you want before app closes.
        //stop service
        this.stopSelf();
    }
}

然后,以这种方式在清单标签中声明您的服务:

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

现在,只需在您的应用关闭之前,在任何您想做某事的地方启动服务。

 Intent intent = new Intent(this, ExitService.class);
        startService(intent);
于 2018-03-13T23:30:25.717 回答