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