I have a ViewFlipper in my Activity that is used as a footer view of a ListView. I had posted a while back regarding an issue I was seeing in the emulator. See Activity has leaked IntentReceiver android.widget.ViewFlipper. I found an answer to that yet.
Now, I'm seeing problems when debugging on a device. Essentially when device configuration change (rotation) causes my activity to be destroyed, I get a crash. See log.
01-19 14:56:19.679: E/AndroidRuntime(30240): FATAL EXCEPTION: main
01-19 14:56:19.679: E/AndroidRuntime(30240): java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper$1@4076f0c0
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:610)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:840)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.widget.ViewFlipper.onDetachedFromWindow(ViewFlipper.java:104)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.View.dispatchDetachedFromWindow(View.java:6173)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1164)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1162)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1162)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1162)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1748)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewRoot.doDie(ViewRoot.java:2759)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.ViewRoot.die(ViewRoot.java:2729)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:218)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.view.Window$LocalWindowManager.removeViewImmediate(Window.java:436)
01-19 14:56:19.679: E/AndroidRuntime(30240): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2705)
Interestingly if the debugger is not attached this problem does not occur as often. This is crippling me.
From what I can see ViewFlipper::onDetachedFromWindow is trying to unregister a receiver which is not registered. This ViewFlipper has been removed from the ListView using removeFooterView before ViewFlipper::onDetachedFromWindow is called.
This is what I use to remove the viewFlipper from the list view:
mLoadMoreFlipper.stopFlipping();
mLoadMoreFlipper.removeAllViews();
getExpandableListView().removeFooterView(mLoadMoreFlipper);
mLoadMoreFlipper = null;
Is there any other way to force destroy a view. I've tried WindowManager.removeView but that throws an exception saying the view has not been registered with WindowManager.
Any help is appreciated.