0

doInBackground() が関数 fn1 を呼び出し、次に別の fn2 を呼び出す単純な AsyncTask があります。その結果、「アクティビティがウィンドウにリークしました」というクラッシュが発生します。doInBackground() から直接 fn2 を呼び出すと、すべて正常に動作します。それは、スレッドでは複数のレベルの fn 呼び出しを行うことができないということですか?(スレッド-> 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

アクティビティのコードに次を追加します。

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

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

アクティビティから離れると、ダイアログ ウィンドウが閉じます。

于 2012-05-25T08:11:41.357 に答える
0

通常、このエラーは、参照しているアクティビティが ActivityStack の一番上から既に削除されている場合に発生します。AsyncTask がアクティビティのライフサイクルに正しく埋め込まれているかどうかを実際に確認する必要があります。

おめでとう、ティム

于 2012-05-25T08:05:49.837 に答える
0

ネストされた関数呼び出し中に何らかの形で ProgressDialog がクラッシュした可能性があります。

于 2012-05-25T08:11:25.023 に答える