我有一個應用程序誰的UI需要一些工作來構建(必須處理一些東西)。所以,我使用AsynchTask構建UI(它在進行一些後臺處理時顯示進度對話框,然後進行UI更新)。我希望能夠從OnRestoreInstanceState()中調用此AsynchTask,以便我可以在旋轉時重建UI。然而,當我打電話從onRestorInstanceState()方法MyAsynchTask.execute(),我得到以下異常:Android:從onRestoreInstanceState()調用AsynchTask失敗
01-05 12:28:45.194: ERROR/WindowManager(409): android.view.WindowLeaked: Activity com.MyActivity has leaked window [email protected] that was originally added here
01-05 12:28:45.194: ERROR/WindowManager(409): at android.view.ViewRoot.<init>(ViewRoot.java:247)
01-05 12:28:45.194: ERROR/WindowManager(409): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
01-05 12:28:45.194: ERROR/WindowManager(409): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-05 12:28:45.194: ERROR/WindowManager(409): at android.view.Window$LocalWindowManager.addView(Window.java:424)
01-05 12:28:45.194: ERROR/WindowManager(409): at android.app.Dialog.show(Dialog.java:241)
01-05 12:28:45.194: ERROR/WindowManager(409): at com.MyClass$MyAsynchTask.onPreExecute(MyClass.java:428)
感謝您的詳細回覆。我實現了你給出的例子,但是現在當我嘗試從我的onRestore方法執行AsynchTask時,出現這個錯誤:由於:java.lang.IllegalStateException:無法執行任務:任務已經執行(任務可以執行只有一次)....在android.os.AsyncTask.execute(AsyncTask.java:383) – ab11 2011-01-05 20:13:10
@ ab11:你不能重新執行任務。如果您在舊活動中執行任務,則無需在新活動中重新執行該任務。 – CommonsWare 2011-01-05 20:35:59
我的任務運行時將一些東西處理成(當前)不可序列化的對象,然後用它來創建UI。所以在一個循環中,這個對象會丟失(因爲我目前無法將它序列化到存儲的包中),這就是爲什麼我想重新執行我的AsynchTask,以便恢復它。我可以簡單地創建一個新的AsynchTask實例(與使用成員變量相反,如您的示例)。但即使我這樣做,並通過this.MyActivity作爲參數的建設,我仍然得到原來的「窗口已泄漏」的例外。 – ab11 2011-01-05 20:46:46