如果我有一个 UI 将从单独的线程更新(使用 AsyncTask),我可以将 AsyncTask 定义为 Activity 的内部类,但这有两个我认为有问题的缺点:
- 它使源文件非常大,降低了管理代码的效率
- 很难重用线程类
什么是好的解决方案?使用内部类,但将它所做的一切抽象到其他类?将对 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/