在我的应用程序中,我使用了IntentService
,在其中我调用了一个Web服务并解析了我的响应。解析完成后,我想更新UI。
我看到有一种方法可以使用广播接收器更新UI,但如果我不想使用广播接收器,还有其他方法可以更新UI。如果是,请分享链接。
答案 0 :(得分:2)
您可以创建绑定Service
,也可以使用EventBus之类的库。
来自Android docs:
绑定服务是客户端 - 服务器接口中的服务器。一个约束 service允许组件(例如活动)绑定到服务, 发送请求,接收响应,甚至执行进程间 通信(IPC)。绑定服务通常仅在其中生存 提供另一个应用程序组件,但不运行 背景无限期。
如果您想使用此方法,则必须创建实现Service
方法的onBind()
。此方法将返回您还必须实现的IBinder
。并且Binder
将使用interface
,您必须再次创建。{/ p>
示例:
<强> MyService.java 强>
public class MyService extends Service {
// ...
@Override
public IBinder onBind(Intent intent) {
return new MyBinder(this);
}
}
<强> MyBinder.java 强>
public class MyBinder extends Binder {
private MyServiceInterface mService;
public MyBinder(MyServiceInterface s) {
mService = s;
}
public MyServiceInterface getService() {
return mService;
}
}
<强> MyServiceInterface.java 强>
public interface MyServiceInterface {
int someMethod();
boolean otherMethod();
Object yetAnotherMethod();
}
有关详细信息,您可以查看我上面链接的文档。
此方法的缺点:常规Service
课程不会像IntentService
一样在后台运行。因此,您还必须实现一种从主线程中运行的方法。
- 简化了组件之间的通信
- 解耦事件发件人和收件人
- 适用于活动,片段和后台主题
- 避免复杂且容易出错的依赖关系和生命周期问题
要使用EventBus,最好的方法是关注the documentation。
所以,这些方法中的任何一种似乎都是一个不错的选择,就像使用BroadcastManager
一样(我不知道为什么你不能使用它)。