FMX开发:应用从最近任务列表划走时如何停止后台服务
实现方案
核心逻辑依赖Android系统原生提供的任务移除回调,不需要额外监听广播或者其他复杂逻辑:
- 方法一:重写服务的
onTaskRemoved回调(适用于需要在任务移除时做额外资源清理的场景)
当用户从最近任务列表划走应用时,系统会主动调用当前运行中服务的onTaskRemoved(Intent rootIntent)方法,你可以在该方法中加入停止服务的逻辑:
如果你使用的是非Java的跨平台框架调用Android服务,只要给@Override public void onTaskRemoved(Intent rootIntent) { super.onTaskRemoved(rootIntent); // 停止当前服务 stopSelf(); // 其他需要释放的资源、终止的子线程都可以在这里处理 }TJService绑定该回调的实现即可,逻辑和原生完全一致。 - 方法二:修改Manifest注册配置(适用于不需要额外清理逻辑的场景)
直接在AndroidManifest.xml里的服务注册节点添加android:stopWithTask="true"属性,用户划走任务时系统会直接终止该服务关联的整个进程,无需编写额外代码:<service android:name=".TJService" android:stopWithTask="true" />
注意事项
- 不要在服务注册节点配置
android:stopWithTask="false",否则onTaskRemoved回调不会被触发 - 部分厂商定制ROM(如小米、华为、荣耀)对后台服务逻辑有自定义限制,如果你使用的是前台服务,可能需要申请后台运行权限才能保证回调正常触发
- 你当前配置的
TJService.JavaClass._GetSTART_NOT_STICKY仅作用于服务被系统异常杀死后的重启逻辑,和任务划走场景无关,不会影响上述方案的生效
内容的提问来源于stack exchange,提问作者Bluerock Lee
相关产品推荐
相关产品推荐

