我在课堂上多次致电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()方法。
答案 0 :(得分:1)
服务只能启动一次,如果您愿意并且喜欢使用布尔标志来复杂化
使用startService()
会覆盖由bindService(Intent, ServiceConnection, int)
管理的默认服务生命周期:它要求服务在调用stopService(Intent)
之前保持运行,无论是否有任何客户端连接到它。请注意,startService()
的来电不会嵌套:无论您拨打startService()
多少次,只需拨打一次stopService(Intent)
即可停止拨打电话。
如果服务正在启动或已在运行,则 返回已启动的实际服务的ComponentName;其他 如果服务不存在则返回null。
请注意,对Context.startService()的多次调用不会嵌套(但是 它们会导致对onStartCommand()的多次相应调用, 所以无论启动多少次,服务都会停止 一旦调用了Context.stopService()或stopSelf();