在这样一个场景中,我的UI将从一个单独的线程(使用AsyncTask)更新,我可以将AsyncTask定义为活动的内部类,但我发现这有两个缺点:
很难重用。
什么是好的解决方案?使用内部类,但抽象它对其他类所做的一切?将对活动的引用传递给AsyncTask?总是将AsyncTask类定义为一个内部类,并且只接受源文件会很大吗?
发布于 2011-01-29 12:17:28
我已经看到了很多例子,只是将一个Context传递到AsyncTask的构造函数中。
public class BackgroundStuff extends AsyncTask<Void, Void, Void> {
...
Context mContext;
...
BackgroundStuff(Context context){
super();
this.mContext = context;
}
...
}我很想知道是否还有其他人使用其他方法。
发布于 2011-01-29 12:39:21
首先,也是最重要的:当使用AsyncTask时,您不能在doInBackground()中执行UI活动。
您可以做的是--如果您想要更新长期运行的后台作业的状态,可以从publishProgress(values) ()到doInBackground()。然后,运行时将为这些值调用您的onProgressUpdate(values)回调,该回调在UI线程中运行,并从您可以更新UI的位置运行。
看一看,例如https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L336,看一个例子。
AsyncTask可以在自己的类文件中实现。
发布于 2011-04-18 22:11:59
对于AsyncTasks,我有一个有点奇怪的P.O.V,因为我通常更喜欢使用普通线程,但从本质上讲,我执行后台任务和更新UI的方式是在onCreate()方法的末尾创建一个处理程序,然后我将重写handleMessage(Message )方法。
然后,在我的线程中,我将将Handler作为参数传入,然后当我希望进行更新时,我将从线程发送一条消息到Handler,现在所做的是从新的后台线程到UI线程上进行通信,以处理UI上的工作。
现在,我设想AsyncTasks执行类似的任务,但不再需要实现重写处理程序的handleMessage方法。
更多地了解这两种方法的优缺点是很有趣的。
https://stackoverflow.com/questions/4836716
复制相似问题