【问题标题】:Android broadcast event for multiple recepients多个收件人的 Android 广播事件
【发布时间】:2016-01-23 14:37:28
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

标签: android broadcastreceiver


【解决方案1】:

在我看来,您不应该只使用广播接收器在多个地方进行通知。 取而代之的是很多方法,您可以使用otto library,也可以关注observer design pattern

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以使用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);
      }
      

      就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 2017-07-02
        • 2019-05-16
        相关资源
        最近更新 更多