我有一个异步任务,它从服务器下载照片并更新主数据结构中的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);
}
仅此而已。