AsynTask 在 doInBackground 上显示 UI 元素

易卜拉欣

为什么图形界面的修改在单独的方法(onPostExecute)中进行,而不是由后台线程执行?

阿诺普

用户界面由ViewsViewGroups组成这些是在UI 线程 aka Main Thread中创建和操作的这是唯一允许创建和修改视图的线程。Ant 尝试从非 UI 线程执行任何 UI 相关操作都会引发异常。的AsyncTask有类似的方法onPostExecuteonPreExecuteonProgressUpdate以迎合其与后台处理产生最常见的情况。

我将尝试通过使用异步任务下载文件的简单示例来解释用例。

onPreExecute - 将在后台处理开始之前调用。因此,可以在此处显示用于显示下载进度的进度条。然后doInBackground()将被调用并开始下载。

onProgressUpdate - 每当publishProgress()调用此方法时都会调用此方法doInBackground()由于doInBackground()在与 UI 线程不同的线程中运行,因此无法更新视图以反映下载进度。所以doInBackground()会调用publishProgress()下载进度。在 UI 线程中publishProgress()调用onProgressUpdate(),UI 可以从这里更新。publishProgress()可以定期调用,如 30 秒或 1 分钟,以不断更新进度

onPostExecute - 一旦下载完成或后台任务,onPostExecute将被调用并在 UI 线程中运行。在这里,我们可以隐藏进度并更新 UI 以指示下载已完成。

希望这能说明为什么 AsyncTask 有更新 UI 的方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章