多次启动服务将嵌套在onStartCommand()中进行的调用?

时间:2015-06-24 11:17:09

标签: android service

我在课堂上多次致电startService()

我的服务onStartCommand()中有一个功能,就像这样 -

    Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(StaticValues.TAG, "service started.");
        processItem();
        return 0;
    }

我的问题是,如果我再次开始服务,将再次调用onStartComamnd()。那么这个呼叫会等到我之前的呼叫结束还是同时执行两个processItem()的呼叫?

编辑:我在评论链接中找到的答案

  

startService()是异步的。因此,当您循环调用时,服务本身并没有获得任何资源,也没有启动。

     

服务只能在一个实例中运行。但是,每次启动服务时,都会调用onStartCommand()方法。

检查:What happens if a Service is started multiple times?

1 个答案:

答案 0 :(得分:1)

服务只能启动一次,如果您愿意并且喜欢使用布尔标志来复杂化

使用startService()会覆盖由bindService(Intent, ServiceConnection, int)管理的默认服务生命周期:它要求服务在调用stopService(Intent)之前保持运行,无论是否有任何客户端连接到它。请注意,startService()的来电不会嵌套:无论您拨打startService()多少次,只需拨打一次stopService(Intent)即可停止拨打电话。

  

如果服务正在启动或已在运行,则   返回已启动的实际服务的ComponentName;其他   如果服务不存在则返回null。

     

请注意,对Context.startService()的多次调用不会嵌套(但是   它们会导致对onStartCommand()的多次相应调用,   所以无论启动多少次,服务都会停止   一旦调用了Context.stopService()或stopSelf();

Link to the Docs

Life Cycle of a Service