我有一个异步任务,它从服务器下载照片并更新主数据结构中的字段。
现在,用户可以在没有这些图片的情况下浏览应用程序(它们只是个人资料图片)。我想在下载完成时通知当前可见的活动,以便在需要时更新它的UI。
我如何在Android中执行此操作?在Django和其他框架中有一些叫做“信号”的东西,它基本上是一个内部广播消息,然后其他对象可以监听,但我在Android中找不到类似的东西。我还在考虑实现一个BroadcastReceiver,但是我必须手动“通知”所有的监听器,并让每个监听器都手动注册和取消注册,这并不难,但我希望有一个更简单的解决方案。
我的问题是“我应该使用BroadcastReceiver实现还是已经支持这种事情”。
谢谢
答案 0 :(得分:0)
在我看来,您不应仅使用广播接收器在多个地方通知。 您可以使用otto library进行操作,而不是使用observer design pattern,您可以使用here
答案 1 :(得分:0)
BoadcastReceiver是在多任务环境中实现UI更新的最简单方法之一。但是你也可以使用相同的处理程序,请参考下面的链接,它提供了一个很好的例子,说明了不同的这种多任务场景,希望它会有所帮助
http://www.techotopia.com/index.php/Android_Threads_and_Thread_Handlers_-_An_Android_Studio_Tutorial
答案 2 :(得分:0)
您可以使用EventBus
这是一个可能的解决方案:
定义一个事件类(你不必扩展任何类)
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);
}
方法
import java.util.ArrayList;
public class Problem2
{
public static void getSum(int[] numbersArray, int starting, int sum)
{
if(numbersArray.length == starting)
{
return;
}
int value = sum + numbersArray[starting];
getSum(numbersArray, starting + 1, value);
getSum(numbersArray, starting + 1, sum);
System.out.print(sum + " " + value + " ");
}
public static void main(String[] args)
{
getSum(new int[] {3, 5}, 0, 0);
}
}
就是这样。