多个接收者的安卓广播事件



我有一个异步任务,它从服务器下载照片并更新主数据结构中的a字段。

现在,用户可以在没有这些图片的情况下浏览应用程序(它们只是个人资料图片)。我想在下载完成后通知当前可见的活动,以便在需要时更新其 UI。

如何在安卓中做到这一点?在Django和其他框架中,有一个名为"信号"的东西,它基本上是一个内部广播消息,然后其他对象可以侦听,但我在Android中找不到类似的东西。我也在考虑实现一个 BroadcastReceiver,但随后我必须手动"通知"所有听众,并让每个听众手动注册和注销,这并不难,但我希望有一个更简单的解决方案。

我的问题是"我应该使用 BroadcastReceiver 实现还是已经支持这样的事情"。

谢谢

在我看来,您不应该仅使用广播接收器在多个地方进行通知。取而代之的是,有很多方法可以使用 otto 库,也可以遵循观察器设计模式

BoadcastReceiver 是在多任务环境中实现 UI 更新的最简单方法之一。但是您也可以使用处理程序进行相同的操作,请参阅下面的链接,它提供了不同此类多任务场景的一个非常好的例子,希望对您有所帮助。

http://www.techotopia.com/index.php/Android_Threads_and_Thread_Handlers_-_An_Android_Studio_Tutorial

您可以使用 EventBus

以下是适合您的可能解决方案:

定义事件类(不必扩展任何类)

public class DownloadComplete {
    private Bitmap bitmap;
    public DownloadComplete(Bitmap bitmap) {
        this.bitmap = bitmap;
    }
    public void displayImage(ImageView imageView) {
        imageView.setImageBitmap(bitmap);
    }
}

下载完成后调用post()方法

@Override
public void onPostExecute(Bitmap result) {
    EventBus.getDefault().post(new DownloadComplete(result));
}

注册要接收事件的任何活动

@Override
public void onResume() {
    super.onResume();
    EventBus.getDefault().register(this);
}
@Override
public void onPause() {
    super.onPause();
    EventBus.getDefault().unregister(this);
}

并为活动实施onEvent()方法

public void onEvent(DownloadComplete event) {
    // assume that you have mImage field of class ImageView in your activity
    event.displayImage(mImageView);
}

仅此而已。

最新更新