根据 Android API IntentService
派生类为每个接收到的 Intent 创建一个新的工作线程,并将其传递给 onHandleIntent()
实现。
所以我假设(如果我错了请纠正我)我的实现应该区分我想要接收的所有不同类型的 Intent ,然后在我的服务中调用相应的方法来处理这个请求。这将全部在工作线程内完成,工作线程已在 onStartCommand()
方法中自动创建。
我的问题是,如果正在执行对仅封装我的服务的公共(public)方法(请参阅 "Extending the Binder class" 部分)的 Binder 的调用,那么这些方法是否也会在专用的工作线程中执行?还是会在主应用程序的线程中完成?如果我想从主屏幕小部件调用方法,是否需要额外的 Messenger
来委托(delegate)这些调用?
我什么时候使用哪种方法(Binder
和 onStartCommand()
)?
最佳答案
IntentService
不是为绑定(bind)目的而构建的。 current implementation从其 onBind()
方法返回 null
。
此外,当前的实现在单独的单线程 上处理所有请求。 (专门在服务启动时创建)。 Intent 消息只是在该线程的处理程序上排队。
如果您扩展 IntentService
,并简单地向客户端提供一个 Binder
,则将在调用这些方法的同一线程上调用 binder 的方法。
如果您实现自己的 IBinder
扩展或使用 Messenger
模式,将在您启动消息 Handler
的线程上调用方法。
关于android - 在 IntentService 类中使用 Binder 和 onHandleIntent 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008932/