考虑此AsyncTask
内部活动MyActivity
:
private class MyTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog progressDialog;
private AlertDialog.Builder alertDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(MyActivity.this, "MyApp", "Working...");
}
@Override
protected Void doInBackground(Void... params) {
// elaborate...
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDialog.dismiss();
alertDialog = new AlertDialog.Builder(MyActivity);
alertDialog.setMessage("Done !");
alertDialog.show();
}
}
如果我宣布
会发生什么private ProgressDialog progressDialog;
private AlertDialog.Builder alertDialog;
在活动范围内的AsyncTask
之外的?
它是否真的相同(对于内存泄漏和其他内部Java行为)?一个比另一个好吗?
答案 0 :(得分:0)
不太确定'相同'是什么意思。但是,如果你正在讨论progressDialog和alertDialog的范围,那么答案肯定是否定的。变量属于声明它的类。
基本上,progressDialog和alertDialog实际需要的只是对Context实例的引用(在你的情况下是'MyActivity'),以便实例化和显示它,因此它们的创建位置无关紧要因为Context对象可用。
希望它有所帮助。