2016年3月6日 星期日

IllegalArgumentException: View not attached to window manager

Reference:

http://stackoverflow.com/questions/22924825/view-not-attached-to-window-manager-crash
http://www.2cto.com/kf/201202/119310.html

Scenario:

UI thread產生另一個 thread(Ex: AsyncTask)來顯示一個 Dialog,當 thread任務完成了再 dismiss dialog,如果在此期間 Activity因為某種原因被殺掉且又重新啟動了,那麼當  Dismiss的時候, WindowManager檢查發現  Dialog所屬的  Activity已經不存在了,就會跳出這個 Exception

Code snippet:

@Override
protected void onDestroy() {
    dismissProgressDialog();
    super.onDestroy();
}

protected void onPostExecute(String file_url)
{
    if (YourActivity.this.isDestroyed()) { // or call isFinishing() if min sdk version < 17
        return;
    }
    dismissProgressDialog();
    something(note);
}

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


沒有留言: