Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:从队列更新UI_Android_Networking_User Interface_Queue - Fatal编程技术网

Android:从队列更新UI

Android:从队列更新UI,android,networking,user-interface,queue,Android,Networking,User Interface,Queue,我在建一个房子。应用程序检索放映时间表,该时间表存储为电影对象的列表,其中包含基本数据-名称和放映时间 对于每部电影,我在cinematheque站点中对电影页面进行异步HTTP调用,以检索完整的数据-描述、年份和长度。分析结果,将其转换为FilmData对象,并插入到BlockingQueue中 我希望UI线程在HTTP调用返回数据时更新胶片描述。我不能使用take()或poll(),因为它们冻结了UI线程 我想到了两种策略: 从外部线程轮询BlockingQueue,并使用更新UI 用于以

我在建一个房子。应用程序检索放映时间表,该时间表存储为
电影对象的
列表,其中包含基本数据-名称和放映时间

对于每部电影,我在cinematheque站点中对电影页面进行异步HTTP调用,以检索完整的数据-描述、年份和长度。分析结果,将其转换为
FilmData
对象,并插入到
BlockingQueue

我希望UI线程在HTTP调用返回数据时更新胶片描述。我不能使用
take()
poll()
,因为它们冻结了UI线程

我想到了两种策略:

  • 从外部线程轮询
    BlockingQueue
    ,并使用更新UI
  • 用于以非阻塞方式轮询队列

在Android应用程序中,当任何网络呼叫结束时更新UI是一个非常常见的场景。正确的方法是什么?

使用
处理程序。例如,HTTP调用完成并创建FilmData对象后,将处理程序消息发布到
活动
。在
处理程序的
handleMessage
方法中,更新UI。

为每部电影创建一个异步任务。指定线程池大小实际上会限制并发请求的数量每部电影可以在放映计划中出现不止一次,我想对每个页面进行一次调用,因此我需要一个中心机制。“正确”的解决方案将取决于您的体系结构目标。我会先弄清楚的。然后回答下一个级别的问题:为什么不直接从异步请求更新队列?如何将一个项目映射到多个视图?如果web请求失败怎么办?顺便说一句,生成多个异步任务可能会在某些操作系统版本上导致问题,总体上不建议这样做,并且您可能不需要任何异步任务。如果您想将更新分组到“帧”中,在计时器上轮询可能是有意义的。等等不管怎样,首先是目标和约束。这可能是我需要的。谢谢