根据Android API,IntentService
派生类为每个接收到的意图创建一个新的工作线程,并将其传递给onHandleIntent()
实现。
所以我假设(纠正我,如果我错了)我的实现应区分我想要接收的所有不同类型的意图,然后在我的服务中调用处理此请求的相应方法。这将在工作线程中完成,工作线程已在onStartCommand()
方法中自动创建。
我的问题是,如果正在执行对封装我的服务的公共方法(请参阅"Extending the Binder class"部分)的绑定器的调用,那么这些方法是否也会在专用的工作人员中执行?或者它将在主应用程序的主题中完成?如果我想从主屏幕Widget调用方法,我是否需要额外的Messenger
来委派这些调用?
我什么时候使用哪种方法(Binder
和onStartCommand()
)?
答案 0 :(得分:4)
IntentService
不是为了绑定目的而构建的。 current implementation从null
方法返回onBind()
。
此外,当前实现处理单独的单线程上的所有请求。 (特别是在服务开始时创建)。 Intent消息只是在该线程的处理程序上排队。
如果扩展IntentService
,只是向客户端提供Binder
,则会在调用方法的同一线程上调用binder的方法。
如果您实现自己的IBinder
扩展或使用Messenger
模式,则会在您发起消息Handler
的帖子上调用方法。