[解決済み】ウィンドウマネージャに添付されていないビューがクラッシュする
2022-04-11 11:21:20
質問
アプリのクラッシュを報告するためにACRAを使用しています。私は
View not attached to window manager
というエラーメッセージが表示されます。
pDialog.dismiss();
をif文の中に入れています。
if (pDialog!=null)
{
if (pDialog.isShowing())
{
pDialog.dismiss();
}
}
を減らすことができました。
View not attached to window manager
を受信していますが、まだいくつか受信しており、解決する方法がわかりません。
エラーメッセージを表示します。
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:425)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:327)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:83)
at android.app.Dialog.dismissDialog(Dialog.java:330)
at android.app.Dialog.dismiss(Dialog.java:312)
at com.package.class$LoadAllProducts.onPostExecute(class.java:624)
at com.package.class$LoadAllProducts.onPostExecute(class.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
コードスニペットです。
class LoadAllProducts extends AsyncTask<String, String, String>
{
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute()
{
super.onPreExecute();
pDialog = new ProgressDialog(CLASS.this);
pDialog.setMessage("Loading. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting All products from url
* */
protected String doInBackground(String... args)
{
// Building Parameters
doMoreStuff("internet");
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url)
{
// dismiss the dialog after getting all products
if (pDialog!=null)
{
if (pDialog.isShowing())
{
pDialog.dismiss(); //This is line 624!
}
}
something(note);
}
}
マニフェストです。
<activity
android:name="pagename.CLASS"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:label="@string/name" >
</activity>
このクラッシュを防ぐには何が足りないのでしょうか?
解決方法を教えてください。
不具合の再現方法を教えてください。
-
お使いの端末でこのオプションを有効にしてください。
Settings -> Developer Options -> Don't keep Activities
. -
の状態でホームボタンを押す。
AsyncTask
が実行されProgressDialog
が表示されます。
Android OSは、アクティビティが非表示になるとすぐに破棄します。いつ
onPostExecute
が呼び出されると
Activity
になります。
"フィニッシング"
の状態であり
ProgressDialog
には添付されません。
Activity
.
修正方法
-
でアクティビティ状態を確認します。
onPostExecute
メソッドを使用します。 -
を解除します。
ProgressDialog
でonDestroy
メソッドを使用します。それ以外の場合はandroid.view.WindowLeaked
例外がスローされます。この例外は通常、アクティビティが終了するときにまだアクティブであるダイアログから発生します。
この修正されたコードを試してみてください。
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<String, String, String> {
// 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);
}
}
}
関連
-
[解決済み】メソッド 'findViewById(int)' を解決できない。)
-
[解決済み】アンドロイドクロームブラウザのモバイルウェブアプリケーションのメニューでHTMLユニコード ☰が検出されない。
-
[解決済み】apkインストール時のINSTALL_FAILED_NO_MATCHING_ABIS
-
[解決済み】プロガードを有効にすると、タスク ':app:crashlyticsStoreDeobsDebug' の依存関係を判断できない。
-
[解決済み】Android Studioでused import文がunused import文に指定されるのはなぜ?
-
[解決済み】Android Studio 3.2 - com.android.tools.build:aapt2:3.2.0-4818971 を見つけられませんでした。
-
[解決済み】android.content.res.Resources$NotFoundExceptionの取得:androidにリソースが存在する場合でも例外が発生する。
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] AndroidのADBデバイスが不正に
-
[解決済み] Android Fragment no view found for ID?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】OnFragmentInteractionListenerを実装する方法
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み] カスタムアダプタからnotifyDataSetChangeが機能しない
-
[解決済み】レンダリングの問題 レンダリング中に発生した例外:com/android/util/PropertiesMap [重複].
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】Android Studio 3.2 - com.android.tools.build:aapt2:3.2.0-4818971 を見つけられませんでした。
-
[解決済み】'dependencies' を '(groovy.lang.Closure)' に適用できない。)
-
[解決済み] サポートされていないメソッドです。BaseConfig.getApplicationIdSuffix()がサポートされていません。
-
[解決済み] Android SDK の場所には空白を含めないでください。NDK ツールで問題が発生するためです。
-
[解決済み] Android: @drawable/picture を drawable に変換するのに失敗しました。