android - 如何从 Android AsyncTask 更改 Activity UI?

标签 android oop android-asynctask

如果我有一个 UI 将从单独的线程更新(使用 AsyncTask),我可以将 AsyncTask 定义为 Activity 的内部类,但这有两个我认为有问题的缺点:

  1. 它使源文件非常大,降低了管理代码的效率
  2. 很难重用线程类

什么是好的解决方案?使用内部类,但将它所做的一切抽象到其他类?将对 Activity 的引用传递给 AsyncTask?始终将 AsyncTask 类定义为内部类,只接受源文件会很大吗?

最佳答案

首先也是最重要的:当使用 AsyncTask 时,您不得在 doInBackground() 中执行 UI Activity 。

你可以做的是 - 如果你想,例如更新长时间运行的后台作业的状态,是从 doInBackground() 到 publishProgress(values)。 然后,运行时将为这些值调用您的 onProgressUpdate(values) 回调,该回调在 UI 线程中运行,您可以从中更新 UI。

看看例如https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L336查看示例。

AsyncTask 可以在自己的类文件中实现。

关于android - 如何从 Android AsyncTask 更改 Activity UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836716/

相关文章:

android - 是否可以通过编程方式从 Firebase Analytics 控制台收集数据?

android - 无法访问 'LinkedHashTreeMap' : it's a public/*package*/com. squareup.moshi

android - 大量设备的推送通知

oop - 为什么我们在面向对象的分析和设计中使用用例图,即使用例不被视为面向对象?

android - AsyncTask block UI 线程

java - 替换java中的整个字符串

java - 附加非空字符串的优雅方式

java - 数据没有通过android应用程序插入mysql数据库

android - Android上最 "death-resistant"的组件是什么?

c# - 在 C# 中的另一个类中声明的类