在我的應用程序中,我在長時間運行的後臺進程中顯示一個對話框,該對話框是模態的。
當Android從後臺任務返回時,此對話框將被解除。檢查是否可以安全地解除對話框
final ProgressDialog progressDialog = ProgressDialog.show(activity, "", "Doing something long running", true, true);
new Thread(new Runnable() {
public void run() {
someLongRunningCode(); // (not using AsyncTask!)
activity.runOnUiThread(new Runnable() {
public void run() {
progressDialog.dismiss();
}
});
}
}).start();
然而現在,當用戶旋轉他的設備,而後臺進程仍在運行的活動是重建,因此,該progressdialog會從活動的分離。
當長時間運行的過程完成時,android顯然會嘗試隱藏(現在分離)的進度對話框,然後導致出現異常:java.lang.IllegalArgumentException: View not attached to window manager
。
是否有任何方法檢查是否可以安全地關閉對話框?
編輯:或者更好的是,有什麼辦法可以將現有的對話框附加到新創建的活動?
一個新的,克隆的對話框會很好。
實際上,對我來說最好的解決方案是,如果有任何方法將現有對話框附加到新創建的活動,因爲任務可能仍在運行。有沒有辦法做到這一點?還更新了我的問題以反映這一點。 – PureSpider
如果您沒有爲橫向和縱向使用單獨的佈局/繪圖,則只需在活動的清單中覆蓋configChange,以便它不會破壞活動(它仍會正確旋轉併爲您調整所有內容)。另一個選項需要在onSaveInstanceState和onRestoreInstanceState上進行大量的工作,如果線程在這段時間內實際完成,您需要非常小心計時問題。 –
谷歌不鼓勵這種方法,儘管...爲什麼? – PureSpider