我正在为我当地的电影中心开发一个粉丝应用程序。该应用程序检索筛选时间表,该计划存储为具有基本数据(名称和筛选时间)的Film
对象的List
。
对于每部电影,我都会对电影中心网站上的电影页面进行异步HTTP调用,以检索完整的数据 - 描述,年份,长度。结果被解析,转换为FilmData
对象,并插入到BlockingQueue
。
我希望 UI 线程在 HTTP 调用返回数据时更新电影描述。我不能使用 take()
或 poll()
,因为它们会冻结 UI 线程。
我想到了两个策略:
- 从外部线程轮询
BlockingQueue
,并使用runOnUiThread
更新 UI。 - 使用
AsyncTask
以非阻塞方式轮询队列。
在任何网络调用时更新 UI 在 Android 应用程序中完成相当常见的场景。正确的方法是什么?
使用Handler
. 例如,一旦 HTTP 调用完成并且您已经创建了 FilmData 对象,请向Activity
发布处理程序消息。在Handler
的handleMessage
方法中,更新UI。