如何检测从最近列表中删除的应用程序?

时间:2014-12-16 06:09:40

标签: android android-recents

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

3 个答案:

答案 0 :(得分:34)

  

我想在用户从中删除应用程序时停止服务   最近的名单。

是的,你可以使用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();
    }
}

希望这有帮助。

答案 1 :(得分: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);

答案 2 :(得分:0)

最后一个答案对我不起作用(我正在使用API​​ 29)。 我在 onTaskRemoved 函数的Javadoc中进行了查找,并看到以下说明: “如果设置了{android:stopWithTask},那么您将不会收到此回调;而是将停止该服务。”

所以,我要做的就是从清单中删除这一行(android:stopWithTask =“ false”),它的工作正常。

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

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