0

我有一个简单的 AsyncTask,它的 doInBackground() 调用了一个函数 fn1,而 fn1 又简单地调用了另一个 fn2。结果是“活动已泄漏窗口”崩溃!当我直接从 doInBackground() 调用 fn2 时,一切正常。这是否意味着在一个线程中不能有超过 1 级的 fn 调用?( Thread-> fn1->fn2)

我是 Java 和 android 的新手,所以如果这是一个基本问题,请多多包涵!谢谢。

我的代码算法是这样的:

我的活动:

MyLibrary myLib;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.myXML);

    myLib = new MyLibrary(MyActivity.this);
    new myTask().execute();

}

private class myTask extends AsyncTask<Void, Void, Void> 
{

    @Override
    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(MyActivity.this, "", "Fetching Data...");
    }
    @Override
    protected Void doInBackground(Void... params) {

            myLib.fn1();        
            return null;

    }

    @Override
    protected void onPostExecute(Void result) {

        progressDialog.dismiss();
    }
}

我的图书馆 :

Context ctx;
String iVar;

public MyLibrary(Context context){
    this.ctx = context;
}

public void fn1()
{

  fn2();
  Log.d("TAG", "Function 1";
}

public void fn2()
{
   iVar = "100"; 
   Log.d("TAG", "Function 2";
}
4

3 回答 3

2

在 Activity 的代码中添加以下内容:

@Override
protected void onPause() {
    super.onPause();

    if(progressDialog != null)
        progressDialog.dismiss();
}

如果您离开活动,它将关闭对话框窗口。

于 2012-05-25T08:11:41.357 回答
0

通常,当您引用的 Activity 已从 ActivityStack 顶部删除时,会发生此错误。您应该真正检查 AsyncTask 是否正确嵌入到您的 Activity 生命周期中。

最好的祝愿,蒂姆

于 2012-05-25T08:05:49.837 回答
0

不知何故 ProgressDialog 可能在嵌套函数调用期间崩溃了。

于 2012-05-25T08:11:25.023 回答