何时执行onStartCommand服务

时间:2016-08-19 16:31:12

标签: android

什么时候服务的onStartCommand完全执行?

在以下代码中,我的服务是从我的活动中的onCreate

启动的
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent(this, CenseDroidService.class);
        //onStartCommand is not extecuted immediatly after startService
        startService(intent);
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    }

那么Android系统什么时候决定调用onStartCommand?我所知道的就是在调用startService之后的一段时间内在主线程上运行。 onCreate在调用onStartCommand之前完全执行。

1 个答案:

答案 0 :(得分:0)

来自documentation

  每次客户端通过调用startService(Intent)显式启动服务时,系统调用,提供它提供的参数和表示启动请求的唯一整数标记

这意味着,每次使用Intent调用startService(intent)时,都会调用onStartCommand。如果您有一百个活动需要启动并绑定到此服务,那么他们将调用startService()并调用onStartCommand

现在,当完全调用时,回答起来有点棘手。在将来的某个时间,这就是您的ServiceConnection异步工作的原因。很可能它可以在下一个UI线程循环中,但它不是你应该依赖的东西。

如果您需要合理了解Service何时开始,您可以使用LocalBroadcastManager向所有已注册的听众广播该事件。 LocalBroadcastManager#sendBroadcastSync实际上将阻塞,直到所有侦听器都响应,因此它可能对此方案有用。