2011-11-23 45 views
0

我正在處理後臺線程和方向更改。我已經通過了這裏給出的代碼。
https://stackoverflow.com/q/1512263以及其他一些帖子。如何銷燬處理屏幕方向更改和鍵盤可用性更改的活動?

我正在使用「android:configChanges =」keyboardHidden | orientation「來處理屏幕方向的變化,它工作正常,但是當我想完成這個活動時,它會被強制關閉,出現一個消息」Unable to destroy活動..」 任何想法,以安全地完成我的活動

日誌輸出爲:?

11-23 12:47:32.025: E/AndroidRuntime(438): Uncaught handler: thread main exiting due to uncaught exception 
11-23 12:47:32.125: E/AndroidRuntime(438): java.lang.RuntimeException: Unable to destroy activity {com.FileBrowser/com.FileBrowser.mainScreenwithtab}: java.lang.IllegalArgumentException: Receiver not registered: c[email protected]44df87d8 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3469) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3487) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread.access$2800(ActivityThread.java:119) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1896) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.os.Looper.loop(Looper.java:123) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread.main(ActivityThread.java:4363) 
11-23 12:47:32.125: E/AndroidRuntime(438): at java.lang.reflect.Method.invokeNative(Native Method) 
11-23 12:47:32.125: E/AndroidRuntime(438): at java.lang.reflect.Method.invoke(Method.java:521) 
11-23 12:47:32.125: E/AndroidRuntime(438): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
11-23 12:47:32.125: E/AndroidRuntime(438): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
11-23 12:47:32.125: E/AndroidRuntime(438): at dalvik.system.NativeStart.main(Native Method) 
11-23 12:47:32.125: E/AndroidRuntime(438): Caused by: java.lang.IllegalArgumentException: Receiver not registered: c[email protected]44df87d8 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:667) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ApplicationContext.unregisterReceiver(ApplicationContext.java:747) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:321) 
11-23 12:47:32.125: E/AndroidRuntime(438): at com.FileBrowser.ScrollableTabActivity.onDestroy(ScrollableTabActivity.java:120) 
11-23 12:47:32.125: E/AndroidRuntime(438): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3456) 
11-23 12:47:32.125: E/AndroidRuntime(438): ... 11 more 
+0

你在你的活動中實現了onConfigurationChanged方法嗎? – Zoombie

+0

請添加例外的日誌輸出 – Janusz

+0

是zoombie我也對我的活動實施了onconfigurationChanged方法。 –

回答

1

你真的不應該用你所使用的技術,我已經寫這兩相關博客文章:

Actvity and background threads (part 1)
Actvity and background threads (part 2)

但由於片段進行了介紹,有處理後臺線程現在更簡單的方法:所謂retained片段(見一個例子here)。

+0

感謝您的帖子inazaruk,您的博客真的很有幫助。你能否上傳一些工作示例代碼,用於任何冗長的過程,例如在滾動視圖(列表/網格)並更新它時動態創建縮略圖。 –

+0

得到的解決方案我在opP​​ause和onDestroy中兩次取消註冊BroadcastReceiver。 –

+0

使用onSaveInstanceState保存應用程序的狀態,並銷燬onDestroy方法上的所有線程。由inazaruk給出的博客真的很有幫助謝謝:) –