如何从Android AsyncTask进行活动UI更改?

Oll*_*e C 9 oop android android-asynctask

在我有一个将从一个单独的线程(使用AsyncTask)更新的UI的场景中,我可以将AsyncTask定义为活动的内部类,但是这有两个缺点我发现有问题:

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

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

Hei*_*upp 13

首要的是:使用时AsyncTask你不能在其中进行UI活动doInBackground().

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

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

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


dav*_*e.c 2

我见过的很多例子只是将 a 传递ContextAsyncTask.

public class BackgroundStuff extends AsyncTask<Void, Void, Void> {
    ...
    Context mContext;
    ...
    BackgroundStuff(Context context){
        super();
        this.mContext = context;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我很想听听是否还有其他人使用其他方法。