在我的活动中,有一个异步任务连接到互联网并将数据保存在我的数据库中。 当我在此任务运行时更改方向时,我将获得例外:
07-27 16:01:45.956 10173-10173/de.MayerhoferSimon.Vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:668)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:364)
at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:163)
at android.app.Dialog.dismissDialog(Dialog.java:347)
at android.app.Dialog.dismiss(Dialog.java:330)
at de.MayerhoferSimon.Vertretungsplan.MainActivity$1.onPostExecute(MainActivity.java:129)
at de.MayerhoferSimon.Vertretungsplan.MainActivity$1.onPostExecute(MainActivity.java:90)
at android.os.AsyncTask.finish(AsyncTask.java:631)
所以这就是我的AsyncTask的样子:
@Override
protected void onPreExecute() {
isRefreshing = true;
this.dialog.setMessage("Lädt Daten...");
this.dialog.show();
}
@Override
protected void onPostExecute(String successful) {
if (!isFinishing()) {
if (successful.equals("succeed")) {
Toast toast = Toast.makeText(context, R.string.toast_refresh_succeed, Toast.LENGTH_LONG);
toast.show();
}
else if (successful.equals("failed")) {
Toast toast = Toast.makeText(context, R.string.toast_refresh_failed, Toast.LENGTH_LONG);
toast.show();
}
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
我现在想要的是在orientationchange上设置一个延迟,这种情况不会再次发生,只有当AsyncTask完成时方向才会改变。
答案 0 :(得分:0)
如果您发现自己不得不颠覆平台的设计流程,那么您可能做错了什么。此外,有许多情况,当this.dialog.isShowing()无效时,包括暂停Activity时(例如,用户按下主页键),因此您必须使用适用于所有方案的通用解决方案。
提供的解决方案here应解决您的问题。