我正在使用Asynctask来执行一个耗时的方法doStuff()
,该方法分配全局数据结构。调试器确认调用了doStuff()
,但是当在Asynctask结束时绘制新视图时,我在访问全局数据结构时得到空指针异常。下面是代码:
public class MyTask extends AsyncTask<Void, Void, Void> {
protected ProgressDialog dialog;
public MyTask (Context context) {
dialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setMessage("Foo");
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
doStuff();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
dialog.dismiss();
}
}
我使用new MyTask(this).execute();
从多个活动执行Asynctask。
AsyncTask
实际上是一个围绕后台线程和处理程序的方便包装器。在后台任务完成之前执行代码。要知道后台任务什么时候完成,你需要把你想要执行的代码或者在onPostExecute
(它将在UI/主线程上运行)中通知你的主活动任务已经完成。要了解更多细节,请参阅进程和线程指南中的使用AsyncTask一节。
你必须在Activity中声明你正在使用AsyncTask的ProgressDialog