IllegalArgumentException:View not attached to window manager解決方法
2221 ワード
この問題を投げ出す前に、一般的に次のような異常が投げ出されます.
この問題は、dialogがまだ実行されている間に、dialogを作成するActivityがfinishing操作を行っているためです.
問題が発生した後、どのように問題を再現しますか?方法は以下の通りである:1.携帯電話の「設定-開発者オプション-アクティビティを保持しない」スイッチをオンにします.2.テスト対象のアプリケーションをシャットダウンし、アプリケーションマネージャでアプリケーションを殺す.3.アプリケーションを再起動する.4.進捗ダイアログを表示しているアプリケーションをホームキーを押してバックグラウンドにカットします.
この問題をどのように解決するか:1.onPostExecuteメソッドでActivityの状態を検出し、isDestroyedがtrueであればdialogのdismissメソッドを呼び出さない.2.ActivityのonDestroyメソッドでdialogのdismissメソッドを呼び出します.
この問題を解決する疑似コードは次のとおりです.
参照stackoverflow View not attached to window manager crashのリンク
android.view.WindowLeaked: Activity ... that was originally added here
この問題は、dialogがまだ実行されている間に、dialogを作成するActivityがfinishing操作を行っているためです.
問題が発生した後、どのように問題を再現しますか?方法は以下の通りである:1.携帯電話の「設定-開発者オプション-アクティビティを保持しない」スイッチをオンにします.2.テスト対象のアプリケーションをシャットダウンし、アプリケーションマネージャでアプリケーションを殺す.3.アプリケーションを再起動する.4.進捗ダイアログを表示しているアプリケーションをホームキーを押してバックグラウンドにカットします.
この問題をどのように解決するか:1.onPostExecuteメソッドでActivityの状態を検出し、isDestroyedがtrueであればdialogのdismissメソッドを呼び出さない.2.ActivityのonDestroyメソッドでdialogのdismissメソッドを呼び出します.
この問題を解決する疑似コードは次のとおりです.
public class YourActivity extends Activity {
<...>
private void showProgressDialog() {
if (pDialog == null) {
pDialog = new ProgressDialog(StartActivity.this);
pDialog.setMessage("Loading. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
}
pDialog.show();
}
private void dismissProgressDialog() {
if (pDialog != null && pDialog.isShowing()) {
pDialog.dismiss();
}
}
@Override
protected void onDestroy() {
dismissProgressDialog();
super.onDestroy();
}
class LoadAllProducts extends AsyncTask {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
showProgressDialog();
}
/**
* getting All products from url
* */
protected String doInBackground(String... args)
{
doMoreStuff("internet");
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url)
{
if (YourActivity.this.isDestroyed()) { // or call isFinishing() if min sdk version < 17
return;
}
dismissProgressDialog();
something(note);
}
}
}
参照stackoverflow View not attached to window manager crashのリンク