内部AsyncTask类内部或外部的AlertDialog.Builder声明?

时间:2014-03-18 16:07:11

标签: java android memory-leaks android-asynctask

考虑此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行为)?一个比另一个好吗?

1 个答案:

答案 0 :(得分:0)

不太确定'相同'是什么意思。但是,如果你正在讨论progressDialog和alertDialog的范围,那么答案肯定是否定的。变量属于声明它的类。

基本上,progressDialog和alertDialog实际需要的只是对Context实例的引用(在你的情况下是'MyActivity'),以便实例化和显示它,因此它们的创建位置无关紧要因为Context对象可用。

希望它有所帮助。