安卓视图未附加到窗口管理器(对话框解除)

3

java.lang.IllegalArgumentException: 视图=com.android.internal.policy.impl.PhoneWindow$DecorView{41c2e378 V.E..... R......D 0,0-450,161} 未附加到窗口管理器

MainActivity:

   Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                       startActivity(intent);
                        finish();    

SecondActivity

 new SetEntrySent(SecondActivity.class, false).execute(id);

 Intent intent = new Intent(SecondActivity.this, MainActivity.class,);
                           startActivity(intent);
                            finish();   

CreateEntry Async onpostexecute

 dialog.dismiss();
}//finishing class

MainActivity:

 **onresume**

//checks again and if entry not sent, it also calls:
   new SetEntrySent(SecondActivity.class, false).execute(id);

对于

 dialog.dismiss();

出现错误了。

进程:com.example..androidwithlogin,PID:27426 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{41c2e378 V.E..... R......D 0,0-450,161}未附加到窗口管理器

首先,主活动调用第二个活动。第二个活动,在操作完成后调用异步任务,同时完成并意图返回主活动。

如果没有使用finish(),它可以工作。

我可以从异步任务中意图返回主活动,但是第二个活动将如何结束?异步任务具有第二个活动的上下文。它可以结束吗?

我搜索并找到了这个。

   private void dismissProgressDialog() {
    if (pDialog != null && pDialog.isShowing()) {
        pDialog.dismiss();
    }
}

它可以实现这个目标。

但是由于异步操作,asynctask会被多次调用。

有什么最好的方法来预防这种情况?如果我将前往MainActivity的操作放在AsyncTask的onPostExecute中

CreateEntry Async onPostExecute

 dialog.dismiss();
 Intent intent = new Intent(context, MainActivity.class,);
                           startActivity(intent);
                            finish();   
}//finishing class

它是否能够完成 SecondActivity,而且这样做安全吗?因为 AsyncTask 将要结束时,MainActivity 不能再次调用它。


你找到解决方法了吗?我也遇到了同样的错误。 - temp
1个回答

0
你可以尝试在Activity中检查isFinishing函数。类似这样的代码:
if ( !YourActivity.isFinishing() && dialog != null && dialog.isShowing()) 
    dialog.dismiss();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接