在没有广播接收器的情况下更新ui

时间:2016-02-22 12:45:21

标签: android android-intentservice

在我的应用程序中,我使用了IntentService,在其中我调用了一个Web服务并解析了我的响应。解析完成后,我想更新UI。

我看到有一种方法可以使用广播接收器更新UI,但如果我不想使用广播接收器,还有其他方法可以更新UI。如果是,请分享链接。

1 个答案:

答案 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 page

  
      
  • 简化了组件之间的通信      
        
    • 解耦事件发件人和收件人
    •   
    • 适用于活动,片段和后台主题
    •   
    • 避免复杂且容易出错的依赖关系和生命周期问题
    •   
  •   

要使用EventBus,最好的方法是关注the documentation

所以,这些方法中的任何一种似乎都是一个不错的选择,就像使用BroadcastManager一样(我不知道为什么你不能使用它)。