服务的 onDestroy() 回调
Posted
技术标签:
【中文标题】服务的 onDestroy() 回调【英文标题】:onDestroy() callback of Service 【发布时间】:2014-02-06 22:50:23 【问题描述】:在我的android项目中,我有一个普通的Service
:
public class MyService extends Service
@Override
public int onStartCommand(...)...
...
@Override
public void onDestroy()
super.onDestroy();
Log.d("MyApp","MyService onDestroy() is called!");
在我的BroadcastReceiver
课程中,我停止MyService
并执行另一项任务:
public static class MyReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
context.stopService(new Intent(context, MyService.class));
doAnotherTask();
根据我的日志,MyService
中的onDestroy()
是在doAnotherTask()
完成后执行的。
如何保证MyService
的onDestory()
在doAnotherTask()
被调用之前执行?
P.S.:我想我可以做这样的事情:
boolean isStopped = context.stopService(new Intent(context, MyService.class));
if(isStopped)
doAnotherTask();
但可能没有服务已启动,这意味着stopService(...)
什么都不做。所以,我不能依赖我上面的代码。
【问题讨论】:
如果 onDestroy 已经在销毁它,那么为什么要手动停止它呢?或者如果你必须阻止它,那么为什么在 onDestroy() 里面? @Saqib,恐怕你没有正确理解我的问题。我只调用 stopService() 之后我才执行另一个任务 (),就是这样。系统调用 onDestroy() 我没有,我只是 stopService() 。但我在 onDestroy() 回调中有一些东西。 你尝试过在两个任务之间稍微延迟一下吗? 不,这不是我想要的方式。 尝试在一个方法中停止你的服务,然后调用你的 anotherTask 方法,看看是否有效果! 【参考方案1】:调用 startActivityForResult() .... 在你得到 onActivityResult,.... 调用你的方法 doAnotherTask() 我认为这样就可以了
【讨论】:
我没有在 Activity 中停止我的服务,我在 BroadcastReceiver 类中。我更新了我的帖子。【参考方案2】:如何从 onDestroy() 函数向广播接收器发送特殊意图?当你的接收者得到它,然后调用 doAnotherTask()。 (我假设您不能简单地从 onDestroy() 直接调用 doAnotherTask()。)
【讨论】:
这对我来说不是一个理想的解决方案,因为我的广播接收器用于接收系统广播的意图。此外,不可能在现有的广播接收器中注册另一个广播接收器。 但是您可以为多个操作注册接收器,然后在 onReceive() 中检查 intent.getAction() 以确定是进行正常处理还是进行清理任务。如果没有更多关于 doAnotherTask() 作用的信息,我真的无法提供更好的想法。以上是关于服务的 onDestroy() 回调的主要内容,如果未能解决你的问题,请参考以下文章
Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestr