Android视图未附加到窗口管理器(对话框关闭)

时间:2016-05-31 08:39:06

标签: android

java.lang.IllegalArgumentException:View = com.android.internal.policy.impl.PhoneWindow $ DecorView {41c2e378 VE .... 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异常:   查看= com.android.internal.policy.impl.PhoneWindow $ {DecorView 41c2e378   V.E ..... R ...... D 0,0-450,161}未附加到窗口管理器

首先,主要活动调用第二个活动。第二个活动,在操作之后调用asynctask并同时完成并调试mainactivity。

当我没有finish()时,它可以正常工作。

我可以从asynctask中获得主要活动,但第二活动将如何完成? asynctask具有第二活动的背景。可以完成吗?

我搜索并找到了这个

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

它适用于此。

但由于异步,asynctask被称为很多次。

防止这种情况的最佳方法是什么?如果我将主要活动发送到async的astexecute

CreateEntry Async onpostexecute

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

它也可以完成第二次活动并且安全吗?因为asynctask将完成,mainactivity不能再次调用它。

1 个答案:

答案 0 :(得分:0)

您可以尝试检查活动上的isFinishing功能。像

这样的东西
if ( !YourActivity.isFinishing() && dialog != null && dialog.isShowing()) 
    dialog.dismiss();