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