我正在使用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。
答案 0 :(得分:2)
AsyncTask
是一个真正的后台线程和处理程序的便利包装器。您在后台任务完成之前执行代码。要知道后台任务何时完成,您需要将要执行的代码放在onPostExecute
(将在UI /主线程上运行)中完成任务的主活动。有关更多详细信息,请参阅Processes and Threads guide使用AsyncTask部分。
答案 1 :(得分:0)
您必须在使用AsyncTask的活动中声明ProgressDialog