[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
Hi Dianne, I'm not implementing any of those methods in my app - is the only other thing that could cause this error is if some of my views are somehow being assigned ids, view View.setId()? Thanks On Nov 24, 10:47 pm, Dianne Hackborn wrote: > I would certainly expect an error if you are trying to put an object in the > bundle whose parcelable protocol is not implemented correctly. > > On Tue, Nov 24, 2009 at 7:21 PM, Streets Of Boston > wrote: > > > I fixed my particular situation. > > > I forgot to implement the static CREATOR in my own ViewBundle class > > (which extends BaseSavedState). > > This prevented the construction of new ViewBundle classes. I just > > added the static CREATOR variable and all goes well. > > > However, should the above exception still happen, despite me coding > > the ViewBundle incorrectly? > > > On Nov 24, 9:43 pm, Streets Of Boston wrote: > > > Thank you, Dianne. > > > This is in my log: > > > > From onSaveInstanceState, this one is being saved: > > > 11-24 21:38:52.786: VERBOSE/smugdroid(12475): > > > Saved Bundle Instance is > > > com.streetsofboston.smugdroid.snapfx.images.SnapFXImageViewContainer > > > $viewbun...@432e6760 > > > > From onRestoreInstanceState, this is printend: > > > 11-24 21:29:16.706: VERBOSE/smugdroid(12341): > > > Bundle Instance is android.view.view$basesavedst...@4325ac40 > > > 11-24 21:29:16.706: VERBOSE/smugdroid(12341): > > > BaseSavedState.EMPTY_STATE instance is android.view.AbsSavedState > > > $...@400681f0 > > > > Where 'bundle instance' is the value of 'parcelable'. > > > And the second one is the value of BaseSavedState.EMPTY_STATE. > > > > As you can see, they are not the same object --> If i would just pass > > > 'parcelable' to the super-class' method, an exception would be throw: > > > > Snippet from android/view/View.java: > > > protected void onRestoreInstanceState(Parcelable state) { > > > mPrivateFlags |= SAVE_STATE_CALLED; > > > if (state != BaseSavedState.EMPTY_STATE && state != null) { > > > throw new IllegalArgumentException("Wrong state class -- expecting > > > View State"); > > > } > > > > } > > > > Also strange is that my original ViewBunlde instance is not sent to > > > onRestoreInstanceState.. why is that? > > > > On Nov 24, 9:04 pm, Dianne Hackborn wrote: > > > > > What type of view is it? There are only a handful of view classes that > > > > actually save and restore state (TextView and a few others). What type > > of > > > > object is it returning? (You could print the state bundle in > > > > onSaveInstanceState().)... > > > > > read more » > > > > > On Tue, Nov 24, 2009 at 4:41 PM, Streets Of Boston > > > > wrote: > > > > > > Thanks Romain, > > > > > > Did not work... still the exception... > > > > > > It occurs on a View with an ID set to 'container'. > > > > > And i went into my View hierarchy to check. All looks fine.: > > > > > There is only one view with the id set to 'container'. > > > > > Every other view in the hierarchy has a unique name or no id at all. > > > > > > And still i get the exception after my process is killed, restarted > > > > > and my view is about to be restored > > > > > Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets > > > > > rid of that exception. > > > > > > Here's my code-snippet. > > > > > @Override > > > > > protected void onRestoreInstanceState(Parcelable parcelable) { > > > > > if (parcelable instanceof ViewBundle) { > > > > > final ViewBundle viewBundle = (ViewBundle)parcelable; > > > > > mSaveState = viewBundle.getBundle(); > > > > > > // Note that mRestoredBitmapOffFullSizedImage can be > > null! > > > > > // It won't be null on a configuration change, but it > > may be > > > > > // after this view's process/activity is restarted. > > > > > mRestoredBitmapOffFullSizedImage = > > > > > (Bitmap)viewBundle.getTransient > > > > > ("bitmapholder"); > > > super.onRestoreInstanceState(viewBundle.getSuperState()); > > > > > } > > > > > else { > > > > > // TODO > > > > > // This exception can be thrown when: > > > > > // Do edit image (Effects) > > > > > // Open Dialer app, make sure process > > > > > smugdroid.process.pictures > > > > > is killed. > > > > > // Then return to SnapFX --> > > > > > // java.lang.IllegalArgumentException: Wrong state > > class -- > > > > > expecting View Sate. > > > > > // Fixed it by always using BaseSavedState.EMPTY_STATE > > > > > instead of > > > > > 'parcelable' > > > > > super.onRestoreInstanceState(parcelable); // <-- > > Exception > > > > > happens > > > > > here when using 'parcelable'. > > > > > } > > > > > } > > > > > > On Nov 24, 5:57 pm, Romain Guy wrote: > > > > > > That would be worrisome because we do not save/restore the state of > > > > >
Re: [android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
I would certainly expect an error if you are trying to put an object in the bundle whose parcelable protocol is not implemented correctly. On Tue, Nov 24, 2009 at 7:21 PM, Streets Of Boston wrote: > I fixed my particular situation. > > I forgot to implement the static CREATOR in my own ViewBundle class > (which extends BaseSavedState). > This prevented the construction of new ViewBundle classes. I just > added the static CREATOR variable and all goes well. > > However, should the above exception still happen, despite me coding > the ViewBundle incorrectly? > > > On Nov 24, 9:43 pm, Streets Of Boston wrote: > > Thank you, Dianne. > > This is in my log: > > > > From onSaveInstanceState, this one is being saved: > > 11-24 21:38:52.786: VERBOSE/smugdroid(12475): > > Saved Bundle Instance is > > com.streetsofboston.smugdroid.snapfx.images.SnapFXImageViewContainer > > $viewbun...@432e6760 > > > > From onRestoreInstanceState, this is printend: > > 11-24 21:29:16.706: VERBOSE/smugdroid(12341): > > Bundle Instance is android.view.view$basesavedst...@4325ac40 > > 11-24 21:29:16.706: VERBOSE/smugdroid(12341): > > BaseSavedState.EMPTY_STATE instance is android.view.AbsSavedState > > $...@400681f0 > > > > Where 'bundle instance' is the value of 'parcelable'. > > And the second one is the value of BaseSavedState.EMPTY_STATE. > > > > As you can see, they are not the same object --> If i would just pass > > 'parcelable' to the super-class' method, an exception would be throw: > > > > Snippet from android/view/View.java: > > protected void onRestoreInstanceState(Parcelable state) { > > mPrivateFlags |= SAVE_STATE_CALLED; > > if (state != BaseSavedState.EMPTY_STATE && state != null) { > > throw new IllegalArgumentException("Wrong state class -- expecting > > View State"); > > } > > > > } > > > > Also strange is that my original ViewBunlde instance is not sent to > > onRestoreInstanceState.. why is that? > > > > On Nov 24, 9:04 pm, Dianne Hackborn wrote: > > > > > > > > > What type of view is it? There are only a handful of view classes that > > > actually save and restore state (TextView and a few others). What type > of > > > object is it returning? (You could print the state bundle in > > > onSaveInstanceState().)... > > > > > read more » > > > > > On Tue, Nov 24, 2009 at 4:41 PM, Streets Of Boston > > > wrote: > > > > > > Thanks Romain, > > > > > > Did not work... still the exception... > > > > > > It occurs on a View with an ID set to 'container'. > > > > And i went into my View hierarchy to check. All looks fine.: > > > > There is only one view with the id set to 'container'. > > > > Every other view in the hierarchy has a unique name or no id at all. > > > > > > And still i get the exception after my process is killed, restarted > > > > and my view is about to be restored > > > > Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets > > > > rid of that exception. > > > > > > Here's my code-snippet. > > > > @Override > > > > protected void onRestoreInstanceState(Parcelable parcelable) { > > > >if (parcelable instanceof ViewBundle) { > > > >final ViewBundle viewBundle = (ViewBundle)parcelable; > > > >mSaveState = viewBundle.getBundle(); > > > > > >// Note that mRestoredBitmapOffFullSizedImage can be > null! > > > >// It won't be null on a configuration change, but it > may be > > > >// after this view's process/activity is restarted. > > > >mRestoredBitmapOffFullSizedImage = > > > > (Bitmap)viewBundle.getTransient > > > > ("bitmapholder"); > > > > > super.onRestoreInstanceState(viewBundle.getSuperState()); > > > >} > > > >else { > > > >// TODO > > > >// This exception can be thrown when: > > > >// Do edit image (Effects) > > > >// Open Dialer app, make sure process > > > > smugdroid.process.pictures > > > > is killed. > > > >// Then return to SnapFX --> > > > >// java.lang.IllegalArgumentException: Wrong state > class -- > > > > expecting View Sate. > > > >// Fixed it by always using BaseSavedState.EMPTY_STATE > > > > instead of > > > > 'parcelable' > > > >super.onRestoreInstanceState(parcelable); // <-- > Exception > > > > happens > > > > here when using 'parcelable'. > > > > } > > > > } > > > > > > On Nov 24, 5:57 pm, Romain Guy wrote: > > > > > That would be worrisome because we do not save/restore the state of > > > > > views without ids. > > > > > > > On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston > > > > > > > wrote: > > > > > > I'm going to check that out. > > > > > > > > What if it occurs on a View without an ID? > > > > > > > > Thanks! > > > > > > > > On Nov 24, 11:27 am, Romain Guy wrote: > > > > > >> This would happen if you have several views of different type > with the > > > > > >> sam
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
I fixed my particular situation. I forgot to implement the static CREATOR in my own ViewBundle class (which extends BaseSavedState). This prevented the construction of new ViewBundle classes. I just added the static CREATOR variable and all goes well. However, should the above exception still happen, despite me coding the ViewBundle incorrectly? On Nov 24, 9:43 pm, Streets Of Boston wrote: > Thank you, Dianne. > This is in my log: > > From onSaveInstanceState, this one is being saved: > 11-24 21:38:52.786: VERBOSE/smugdroid(12475): > Saved Bundle Instance is > com.streetsofboston.smugdroid.snapfx.images.SnapFXImageViewContainer > $viewbun...@432e6760 > > From onRestoreInstanceState, this is printend: > 11-24 21:29:16.706: VERBOSE/smugdroid(12341): > Bundle Instance is android.view.view$basesavedst...@4325ac40 > 11-24 21:29:16.706: VERBOSE/smugdroid(12341): > BaseSavedState.EMPTY_STATE instance is android.view.AbsSavedState > $...@400681f0 > > Where 'bundle instance' is the value of 'parcelable'. > And the second one is the value of BaseSavedState.EMPTY_STATE. > > As you can see, they are not the same object --> If i would just pass > 'parcelable' to the super-class' method, an exception would be throw: > > Snippet from android/view/View.java: > protected void onRestoreInstanceState(Parcelable state) { > mPrivateFlags |= SAVE_STATE_CALLED; > if (state != BaseSavedState.EMPTY_STATE && state != null) { > throw new IllegalArgumentException("Wrong state class -- expecting > View State"); > } > > } > > Also strange is that my original ViewBunlde instance is not sent to > onRestoreInstanceState.. why is that? > > On Nov 24, 9:04 pm, Dianne Hackborn wrote: > > > > > What type of view is it? There are only a handful of view classes that > > actually save and restore state (TextView and a few others). What type of > > object is it returning? (You could print the state bundle in > > onSaveInstanceState().)... > > > read more » > > > On Tue, Nov 24, 2009 at 4:41 PM, Streets Of Boston > > wrote: > > > > Thanks Romain, > > > > Did not work... still the exception... > > > > It occurs on a View with an ID set to 'container'. > > > And i went into my View hierarchy to check. All looks fine.: > > > There is only one view with the id set to 'container'. > > > Every other view in the hierarchy has a unique name or no id at all. > > > > And still i get the exception after my process is killed, restarted > > > and my view is about to be restored > > > Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets > > > rid of that exception. > > > > Here's my code-snippet. > > > @Override > > > protected void onRestoreInstanceState(Parcelable parcelable) { > > > if (parcelable instanceof ViewBundle) { > > > final ViewBundle viewBundle = (ViewBundle)parcelable; > > > mSaveState = viewBundle.getBundle(); > > > > // Note that mRestoredBitmapOffFullSizedImage can be null! > > > // It won't be null on a configuration change, but it may > > > be > > > // after this view's process/activity is restarted. > > > mRestoredBitmapOffFullSizedImage = > > > (Bitmap)viewBundle.getTransient > > > ("bitmapholder"); > > > super.onRestoreInstanceState(viewBundle.getSuperState()); > > > } > > > else { > > > // TODO > > > // This exception can be thrown when: > > > // Do edit image (Effects) > > > // Open Dialer app, make sure process > > > smugdroid.process.pictures > > > is killed. > > > // Then return to SnapFX --> > > > // java.lang.IllegalArgumentException: Wrong state class -- > > > expecting View Sate. > > > // Fixed it by always using BaseSavedState.EMPTY_STATE > > > instead of > > > 'parcelable' > > > super.onRestoreInstanceState(parcelable); // <-- Exception > > > happens > > > here when using 'parcelable'. > > > } > > > } > > > > On Nov 24, 5:57 pm, Romain Guy wrote: > > > > That would be worrisome because we do not save/restore the state of > > > > views without ids. > > > > > On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston > > > > > wrote: > > > > > I'm going to check that out. > > > > > > What if it occurs on a View without an ID? > > > > > > Thanks! > > > > > > On Nov 24, 11:27 am, Romain Guy wrote: > > > > >> This would happen if you have several views of different type with > > > > >> the > > > > >> same id inside a single view hierarchy. This could cause other > > > > >> problems so I really advise you to not hack around the default > > > > >> implementation of onRestoreInstanceState() but make sure that your > > > > >> UI > > > > >> is setup correctly. > > > > > >> On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > > > > >> wrote: > > > > >> > i've seen this too. > > > > >> > I got around it by overriding the pr
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
Thank you, Dianne. This is in my log: >From onSaveInstanceState, this one is being saved: 11-24 21:38:52.786: VERBOSE/smugdroid(12475): Saved Bundle Instance is com.streetsofboston.smugdroid.snapfx.images.SnapFXImageViewContainer $viewbun...@432e6760 >From onRestoreInstanceState, this is printend: 11-24 21:29:16.706: VERBOSE/smugdroid(12341): Bundle Instance is android.view.view$basesavedst...@4325ac40 11-24 21:29:16.706: VERBOSE/smugdroid(12341): BaseSavedState.EMPTY_STATE instance is android.view.AbsSavedState $...@400681f0 Where 'bundle instance' is the value of 'parcelable'. And the second one is the value of BaseSavedState.EMPTY_STATE. As you can see, they are not the same object --> If i would just pass 'parcelable' to the super-class' method, an exception would be throw: Snippet from android/view/View.java: protected void onRestoreInstanceState(Parcelable state) { mPrivateFlags |= SAVE_STATE_CALLED; if (state != BaseSavedState.EMPTY_STATE && state != null) { throw new IllegalArgumentException("Wrong state class -- expecting View State"); } } Also strange is that my original ViewBunlde instance is not sent to onRestoreInstanceState.. why is that? On Nov 24, 9:04 pm, Dianne Hackborn wrote: > What type of view is it? There are only a handful of view classes that > actually save and restore state (TextView and a few others). What type of > object is it returning? (You could print the state bundle in > onSaveInstanceState().)... > > read more » > > On Tue, Nov 24, 2009 at 4:41 PM, Streets Of Boston > wrote: > > > > > Thanks Romain, > > > Did not work... still the exception... > > > It occurs on a View with an ID set to 'container'. > > And i went into my View hierarchy to check. All looks fine.: > > There is only one view with the id set to 'container'. > > Every other view in the hierarchy has a unique name or no id at all. > > > And still i get the exception after my process is killed, restarted > > and my view is about to be restored > > Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets > > rid of that exception. > > > Here's my code-snippet. > > @Override > > protected void onRestoreInstanceState(Parcelable parcelable) { > > if (parcelable instanceof ViewBundle) { > > final ViewBundle viewBundle = (ViewBundle)parcelable; > > mSaveState = viewBundle.getBundle(); > > > // Note that mRestoredBitmapOffFullSizedImage can be null! > > // It won't be null on a configuration change, but it may be > > // after this view's process/activity is restarted. > > mRestoredBitmapOffFullSizedImage = > > (Bitmap)viewBundle.getTransient > > ("bitmapholder"); > > super.onRestoreInstanceState(viewBundle.getSuperState()); > > } > > else { > > // TODO > > // This exception can be thrown when: > > // Do edit image (Effects) > > // Open Dialer app, make sure process > > smugdroid.process.pictures > > is killed. > > // Then return to SnapFX --> > > // java.lang.IllegalArgumentException: Wrong state class -- > > expecting View Sate. > > // Fixed it by always using BaseSavedState.EMPTY_STATE > > instead of > > 'parcelable' > > super.onRestoreInstanceState(parcelable); // <-- Exception > > happens > > here when using 'parcelable'. > > } > > } > > > On Nov 24, 5:57 pm, Romain Guy wrote: > > > That would be worrisome because we do not save/restore the state of > > > views without ids. > > > > On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston > > > > wrote: > > > > I'm going to check that out. > > > > > What if it occurs on a View without an ID? > > > > > Thanks! > > > > > On Nov 24, 11:27 am, Romain Guy wrote: > > > >> This would happen if you have several views of different type with the > > > >> same id inside a single view hierarchy. This could cause other > > > >> problems so I really advise you to not hack around the default > > > >> implementation of onRestoreInstanceState() but make sure that your UI > > > >> is setup correctly. > > > > >> On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > > > >> wrote: > > > >> > i've seen this too. > > > >> > I got around it by overriding the problematic View's > > > >> > onRestoreInstanceState method: > > > > >> > public void onRestoreInstanceState(Bundle savedState) { > > > >> > ... > > > >> > ... > > > >> > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > > > >> > } > > > > >> > I took a look at the android.view.View's implementation of this > > > >> > onRestoreInstanceState method and it only expects the > > > >> > BaseSavedState.EMPTY_STATE as valid input. It checks for if > > > >> > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > > > >> > For me it went wrong because 'savedState' is no longer the actual > > > >>
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
Thank you, Dianne. This is in my log: 11-24 21:29:16.706: VERBOSE/smugdroid(12341): Bundle Instance is android.view.view$basesavedst...@4325ac40 11-24 21:29:16.706: VERBOSE/smugdroid(12341): BaseSavedState.EMPTY_STATE instance is android.view.AbsSavedState $...@400681f0 Where 'bundle instance' is the value of 'parcelable'. And the second one is the value of BaseSavedState.EMPTY_STATE. As you can see, they are not the same object --> If i would just pass 'parcelable' to the super-class' method, an exception would be throw: Snippet from android/view/View.java: protected void onRestoreInstanceState(Parcelable state) { mPrivateFlags |= SAVE_STATE_CALLED; if (state != BaseSavedState.EMPTY_STATE && state != null) { throw new IllegalArgumentException("Wrong state class -- expecting View State"); } } On Nov 24, 9:04 pm, Dianne Hackborn wrote: > What type of view is it? There are only a handful of view classes that > actually save and restore state (TextView and a few others). What type of > object is it returning? (You could print the state bundle in > onSaveInstanceState().)... > > read more » > > On Tue, Nov 24, 2009 at 4:41 PM, Streets Of Boston > wrote: > > > > > Thanks Romain, > > > Did not work... still the exception... > > > It occurs on a View with an ID set to 'container'. > > And i went into my View hierarchy to check. All looks fine.: > > There is only one view with the id set to 'container'. > > Every other view in the hierarchy has a unique name or no id at all. > > > And still i get the exception after my process is killed, restarted > > and my view is about to be restored > > Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets > > rid of that exception. > > > Here's my code-snippet. > > @Override > > protected void onRestoreInstanceState(Parcelable parcelable) { > > if (parcelable instanceof ViewBundle) { > > final ViewBundle viewBundle = (ViewBundle)parcelable; > > mSaveState = viewBundle.getBundle(); > > > // Note that mRestoredBitmapOffFullSizedImage can be null! > > // It won't be null on a configuration change, but it may be > > // after this view's process/activity is restarted. > > mRestoredBitmapOffFullSizedImage = > > (Bitmap)viewBundle.getTransient > > ("bitmapholder"); > > super.onRestoreInstanceState(viewBundle.getSuperState()); > > } > > else { > > // TODO > > // This exception can be thrown when: > > // Do edit image (Effects) > > // Open Dialer app, make sure process > > smugdroid.process.pictures > > is killed. > > // Then return to SnapFX --> > > // java.lang.IllegalArgumentException: Wrong state class -- > > expecting View Sate. > > // Fixed it by always using BaseSavedState.EMPTY_STATE > > instead of > > 'parcelable' > > super.onRestoreInstanceState(parcelable); // <-- Exception > > happens > > here when using 'parcelable'. > > } > > } > > > On Nov 24, 5:57 pm, Romain Guy wrote: > > > That would be worrisome because we do not save/restore the state of > > > views without ids. > > > > On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston > > > > wrote: > > > > I'm going to check that out. > > > > > What if it occurs on a View without an ID? > > > > > Thanks! > > > > > On Nov 24, 11:27 am, Romain Guy wrote: > > > >> This would happen if you have several views of different type with the > > > >> same id inside a single view hierarchy. This could cause other > > > >> problems so I really advise you to not hack around the default > > > >> implementation of onRestoreInstanceState() but make sure that your UI > > > >> is setup correctly. > > > > >> On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > > > >> wrote: > > > >> > i've seen this too. > > > >> > I got around it by overriding the problematic View's > > > >> > onRestoreInstanceState method: > > > > >> > public void onRestoreInstanceState(Bundle savedState) { > > > >> > ... > > > >> > ... > > > >> > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > > > >> > } > > > > >> > I took a look at the android.view.View's implementation of this > > > >> > onRestoreInstanceState method and it only expects the > > > >> > BaseSavedState.EMPTY_STATE as valid input. It checks for if > > > >> > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > > > >> > For me it went wrong because 'savedState' is no longer the actual > > > >> > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it > > > >> > (after the killed process has been restored/restarted) and this > > means > > > >> > that the '!=' operator returns true and an exception is thrown. > > > > >> > On Nov 24, 10:08 am, Mark Wyszomierski wrote: > > > >> >> Hi, > > > > >> >> I'm testing how my app beha
Re: [android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
What type of view is it? There are only a handful of view classes that actually save and restore state (TextView and a few others). What type of object is it returning? (You could print the state bundle in onSaveInstanceState().) On Tue, Nov 24, 2009 at 4:41 PM, Streets Of Boston wrote: > Thanks Romain, > > Did not work... still the exception... > > It occurs on a View with an ID set to 'container'. > And i went into my View hierarchy to check. All looks fine.: > There is only one view with the id set to 'container'. > Every other view in the hierarchy has a unique name or no id at all. > > And still i get the exception after my process is killed, restarted > and my view is about to be restored > Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets > rid of that exception. > > > Here's my code-snippet. > @Override > protected void onRestoreInstanceState(Parcelable parcelable) { >if (parcelable instanceof ViewBundle) { >final ViewBundle viewBundle = (ViewBundle)parcelable; >mSaveState = viewBundle.getBundle(); > >// Note that mRestoredBitmapOffFullSizedImage can be null! >// It won't be null on a configuration change, but it may be >// after this view's process/activity is restarted. >mRestoredBitmapOffFullSizedImage = > (Bitmap)viewBundle.getTransient > ("bitmapholder"); >super.onRestoreInstanceState(viewBundle.getSuperState()); >} >else { >// TODO >// This exception can be thrown when: >// Do edit image (Effects) >// Open Dialer app, make sure process > smugdroid.process.pictures > is killed. >// Then return to SnapFX --> >// java.lang.IllegalArgumentException: Wrong state class -- > expecting View Sate. >// Fixed it by always using BaseSavedState.EMPTY_STATE > instead of > 'parcelable' >super.onRestoreInstanceState(parcelable); // <-- Exception > happens > here when using 'parcelable'. > } > } > > > On Nov 24, 5:57 pm, Romain Guy wrote: > > That would be worrisome because we do not save/restore the state of > > views without ids. > > > > On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston > > > > > > > > > > > > wrote: > > > I'm going to check that out. > > > > > What if it occurs on a View without an ID? > > > > > Thanks! > > > > > On Nov 24, 11:27 am, Romain Guy wrote: > > >> This would happen if you have several views of different type with the > > >> same id inside a single view hierarchy. This could cause other > > >> problems so I really advise you to not hack around the default > > >> implementation of onRestoreInstanceState() but make sure that your UI > > >> is setup correctly. > > > > >> On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > > > >> wrote: > > >> > i've seen this too. > > >> > I got around it by overriding the problematic View's > > >> > onRestoreInstanceState method: > > > > >> > public void onRestoreInstanceState(Bundle savedState) { > > >> > ... > > >> > ... > > >> > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > > >> > } > > > > >> > I took a look at the android.view.View's implementation of this > > >> > onRestoreInstanceState method and it only expects the > > >> > BaseSavedState.EMPTY_STATE as valid input. It checks for if > > >> > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > > > >> > For me it went wrong because 'savedState' is no longer the actual > > >> > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it > > >> > (after the killed process has been restored/restarted) and this > means > > >> > that the '!=' operator returns true and an exception is thrown. > > > > >> > On Nov 24, 10:08 am, Mark Wyszomierski wrote: > > >> >> Hi, > > > > >> >> I'm testing how my app behaves when killed by the OS due to low > memory > > >> >> conditions. I always have three activities on the stack, like: > > > > >> >>A B C (then C launches maps or some other heavy process) > > > > >> >> when my app is killed, and I return to it, C starts itself up again > > >> >> ok. When I hit the back button to go to B, I [sometimes] get an > > >> >> exception thrown which I can't trace. Output is below. I don't know > > >> >> where to go from here. I've only seen one other post mentioning > this > > >> >> exception, but it was related to a reproducable error when rotating > > >> >> the device. This only happens sometimes. Thanks for any help: > > > > >> >> 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: > > >> >> thread main exiting due to uncaught exception > > >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): > > >> >> java.lang.RuntimeException: Unable to start activity ComponentInfo > > >> >> {com.test.android/com.test.android.ui.ActivityHello}: > > >> >> java.lang.IllegalArgumentException: Wrong s
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
Thanks Romain, Did not work... still the exception... It occurs on a View with an ID set to 'container'. And i went into my View hierarchy to check. All looks fine.: There is only one view with the id set to 'container'. Every other view in the hierarchy has a unique name or no id at all. And still i get the exception after my process is killed, restarted and my view is about to be restored Doing super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); gets rid of that exception. Here's my code-snippet. @Override protected void onRestoreInstanceState(Parcelable parcelable) { if (parcelable instanceof ViewBundle) { final ViewBundle viewBundle = (ViewBundle)parcelable; mSaveState = viewBundle.getBundle(); // Note that mRestoredBitmapOffFullSizedImage can be null! // It won't be null on a configuration change, but it may be // after this view's process/activity is restarted. mRestoredBitmapOffFullSizedImage = (Bitmap)viewBundle.getTransient ("bitmapholder"); super.onRestoreInstanceState(viewBundle.getSuperState()); } else { // TODO // This exception can be thrown when: // Do edit image (Effects) // Open Dialer app, make sure process smugdroid.process.pictures is killed. // Then return to SnapFX --> // java.lang.IllegalArgumentException: Wrong state class -- expecting View Sate. // Fixed it by always using BaseSavedState.EMPTY_STATE instead of 'parcelable' super.onRestoreInstanceState(parcelable); // <-- Exception happens here when using 'parcelable'. } } On Nov 24, 5:57 pm, Romain Guy wrote: > That would be worrisome because we do not save/restore the state of > views without ids. > > On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston > > > > > > wrote: > > I'm going to check that out. > > > What if it occurs on a View without an ID? > > > Thanks! > > > On Nov 24, 11:27 am, Romain Guy wrote: > >> This would happen if you have several views of different type with the > >> same id inside a single view hierarchy. This could cause other > >> problems so I really advise you to not hack around the default > >> implementation of onRestoreInstanceState() but make sure that your UI > >> is setup correctly. > > >> On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > >> wrote: > >> > i've seen this too. > >> > I got around it by overriding the problematic View's > >> > onRestoreInstanceState method: > > >> > public void onRestoreInstanceState(Bundle savedState) { > >> > ... > >> > ... > >> > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > >> > } > > >> > I took a look at the android.view.View's implementation of this > >> > onRestoreInstanceState method and it only expects the > >> > BaseSavedState.EMPTY_STATE as valid input. It checks for if > >> > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > >> > For me it went wrong because 'savedState' is no longer the actual > >> > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it > >> > (after the killed process has been restored/restarted) and this means > >> > that the '!=' operator returns true and an exception is thrown. > > >> > On Nov 24, 10:08 am, Mark Wyszomierski wrote: > >> >> Hi, > > >> >> I'm testing how my app behaves when killed by the OS due to low memory > >> >> conditions. I always have three activities on the stack, like: > > >> >> A B C (then C launches maps or some other heavy process) > > >> >> when my app is killed, and I return to it, C starts itself up again > >> >> ok. When I hit the back button to go to B, I [sometimes] get an > >> >> exception thrown which I can't trace. Output is below. I don't know > >> >> where to go from here. I've only seen one other post mentioning this > >> >> exception, but it was related to a reproducable error when rotating > >> >> the device. This only happens sometimes. Thanks for any help: > > >> >> 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: > >> >> thread main exiting due to uncaught exception > >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): > >> >> java.lang.RuntimeException: Unable to start activity ComponentInfo > >> >> {com.test.android/com.test.android.ui.ActivityHello}: > >> >> java.lang.IllegalArgumentException: Wrong state class -- expecting > >> >> View State > >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> >> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > >> >> 2268) > >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> >> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > >> >> 2284) > >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> >> android.app.ActivityThread.access$1800(ActivityThread.java:112) > >> >> 11-24 07:5
Re: [android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
That would be worrisome because we do not save/restore the state of views without ids. On Tue, Nov 24, 2009 at 2:39 PM, Streets Of Boston wrote: > I'm going to check that out. > > What if it occurs on a View without an ID? > > Thanks! > > On Nov 24, 11:27 am, Romain Guy wrote: >> This would happen if you have several views of different type with the >> same id inside a single view hierarchy. This could cause other >> problems so I really advise you to not hack around the default >> implementation of onRestoreInstanceState() but make sure that your UI >> is setup correctly. >> >> On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston >> >> >> >> >> >> wrote: >> > i've seen this too. >> > I got around it by overriding the problematic View's >> > onRestoreInstanceState method: >> >> > public void onRestoreInstanceState(Bundle savedState) { >> > ... >> > ... >> > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); >> > } >> >> > I took a look at the android.view.View's implementation of this >> > onRestoreInstanceState method and it only expects the >> > BaseSavedState.EMPTY_STATE as valid input. It checks for if >> > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... >> >> > For me it went wrong because 'savedState' is no longer the actual >> > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it >> > (after the killed process has been restored/restarted) and this means >> > that the '!=' operator returns true and an exception is thrown. >> >> > On Nov 24, 10:08 am, Mark Wyszomierski wrote: >> >> Hi, >> >> >> I'm testing how my app behaves when killed by the OS due to low memory >> >> conditions. I always have three activities on the stack, like: >> >> >> A B C (then C launches maps or some other heavy process) >> >> >> when my app is killed, and I return to it, C starts itself up again >> >> ok. When I hit the back button to go to B, I [sometimes] get an >> >> exception thrown which I can't trace. Output is below. I don't know >> >> where to go from here. I've only seen one other post mentioning this >> >> exception, but it was related to a reproducable error when rotating >> >> the device. This only happens sometimes. Thanks for any help: >> >> >> 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: >> >> thread main exiting due to uncaught exception >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): >> >> java.lang.RuntimeException: Unable to start activity ComponentInfo >> >> {com.test.android/com.test.android.ui.ActivityHello}: >> >> java.lang.IllegalArgumentException: Wrong state class -- expecting >> >> View State >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: >> >> 2268) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: >> >> 2284) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.app.ActivityThread.access$1800(ActivityThread.java:112) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.os.Handler.dispatchMessage(Handler.java:99) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.os.Looper.loop(Looper.java:123) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.app.ActivityThread.main(ActivityThread.java:3948) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> java.lang.reflect.Method.invokeNative(Native Method) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> java.lang.reflect.Method.invoke(Method.java:521) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run >> >> (ZygoteInit.java:782) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> dalvik.system.NativeStart.main(Native Method) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): Caused by: >> >> java.lang.IllegalArgumentException: Wrong state class -- expecting >> >> View State >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.view.View.onRestoreInstanceState(View.java:5359) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.view.View.dispatchRestoreInstanceState(View.java:5335) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> >> 1093) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> >> 1097) >> >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> >> android.view.ViewGroup.dispatchRestoreInstanceState(Vi
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
I'm going to check that out. What if it occurs on a View without an ID? Thanks! On Nov 24, 11:27 am, Romain Guy wrote: > This would happen if you have several views of different type with the > same id inside a single view hierarchy. This could cause other > problems so I really advise you to not hack around the default > implementation of onRestoreInstanceState() but make sure that your UI > is setup correctly. > > On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > > > > > wrote: > > i've seen this too. > > I got around it by overriding the problematic View's > > onRestoreInstanceState method: > > > public void onRestoreInstanceState(Bundle savedState) { > > ... > > ... > > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > > } > > > I took a look at the android.view.View's implementation of this > > onRestoreInstanceState method and it only expects the > > BaseSavedState.EMPTY_STATE as valid input. It checks for if > > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > > For me it went wrong because 'savedState' is no longer the actual > > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it > > (after the killed process has been restored/restarted) and this means > > that the '!=' operator returns true and an exception is thrown. > > > On Nov 24, 10:08 am, Mark Wyszomierski wrote: > >> Hi, > > >> I'm testing how my app behaves when killed by the OS due to low memory > >> conditions. I always have three activities on the stack, like: > > >> A B C (then C launches maps or some other heavy process) > > >> when my app is killed, and I return to it, C starts itself up again > >> ok. When I hit the back button to go to B, I [sometimes] get an > >> exception thrown which I can't trace. Output is below. I don't know > >> where to go from here. I've only seen one other post mentioning this > >> exception, but it was related to a reproducable error when rotating > >> the device. This only happens sometimes. Thanks for any help: > > >> 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: > >> thread main exiting due to uncaught exception > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): > >> java.lang.RuntimeException: Unable to start activity ComponentInfo > >> {com.test.android/com.test.android.ui.ActivityHello}: > >> java.lang.IllegalArgumentException: Wrong state class -- expecting > >> View State > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > >> 2268) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > >> 2284) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.access$1800(ActivityThread.java:112) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.os.Handler.dispatchMessage(Handler.java:99) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.os.Looper.loop(Looper.java:123) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.main(ActivityThread.java:3948) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> java.lang.reflect.Method.invokeNative(Native Method) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> java.lang.reflect.Method.invoke(Method.java:521) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run > >> (ZygoteInit.java:782) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> dalvik.system.NativeStart.main(Native Method) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): Caused by: > >> java.lang.IllegalArgumentException: Wrong state class -- expecting > >> View State > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.View.onRestoreInstanceState(View.java:5359) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.View.dispatchRestoreInstanceState(View.java:5335) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1093) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1097) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1097) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1097) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGrou
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
Hi guys, I'm not explicitly setting IDs on any of my views. I'm not doing anything related to views in my instance save handler either, just saving a string. Is there something else I may be using incorrectly to cause that? Thanks On Nov 24, 11:27 am, Romain Guy wrote: > This would happen if you have several views of different type with the > same id inside a single view hierarchy. This could cause other > problems so I really advise you to not hack around the default > implementation of onRestoreInstanceState() but make sure that your UI > is setup correctly. > > On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston > > > > wrote: > > i've seen this too. > > I got around it by overriding the problematic View's > > onRestoreInstanceState method: > > > public void onRestoreInstanceState(Bundle savedState) { > > ... > > ... > > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > > } > > > I took a look at the android.view.View's implementation of this > > onRestoreInstanceState method and it only expects the > > BaseSavedState.EMPTY_STATE as valid input. It checks for if > > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > > For me it went wrong because 'savedState' is no longer the actual > > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it > > (after the killed process has been restored/restarted) and this means > > that the '!=' operator returns true and an exception is thrown. > > > On Nov 24, 10:08 am, Mark Wyszomierski wrote: > >> Hi, > > >> I'm testing how my app behaves when killed by the OS due to low memory > >> conditions. I always have three activities on the stack, like: > > >> A B C (then C launches maps or some other heavy process) > > >> when my app is killed, and I return to it, C starts itself up again > >> ok. When I hit the back button to go to B, I [sometimes] get an > >> exception thrown which I can't trace. Output is below. I don't know > >> where to go from here. I've only seen one other post mentioning this > >> exception, but it was related to a reproducable error when rotating > >> the device. This only happens sometimes. Thanks for any help: > > >> 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: > >> thread main exiting due to uncaught exception > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): > >> java.lang.RuntimeException: Unable to start activity ComponentInfo > >> {com.test.android/com.test.android.ui.ActivityHello}: > >> java.lang.IllegalArgumentException: Wrong state class -- expecting > >> View State > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > >> 2268) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > >> 2284) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.access$1800(ActivityThread.java:112) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.os.Handler.dispatchMessage(Handler.java:99) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.os.Looper.loop(Looper.java:123) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.app.ActivityThread.main(ActivityThread.java:3948) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> java.lang.reflect.Method.invokeNative(Native Method) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> java.lang.reflect.Method.invoke(Method.java:521) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run > >> (ZygoteInit.java:782) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> dalvik.system.NativeStart.main(Native Method) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): Caused by: > >> java.lang.IllegalArgumentException: Wrong state class -- expecting > >> View State > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.View.onRestoreInstanceState(View.java:5359) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.View.dispatchRestoreInstanceState(View.java:5335) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1093) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1097) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > >> 1097) > >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > >> android.view.ViewG
Re: [android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
This would happen if you have several views of different type with the same id inside a single view hierarchy. This could cause other problems so I really advise you to not hack around the default implementation of onRestoreInstanceState() but make sure that your UI is setup correctly. On Tue, Nov 24, 2009 at 7:28 AM, Streets Of Boston wrote: > i've seen this too. > I got around it by overriding the problematic View's > onRestoreInstanceState method: > > public void onRestoreInstanceState(Bundle savedState) { > ... > ... > super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); > } > > I took a look at the android.view.View's implementation of this > onRestoreInstanceState method and it only expects the > BaseSavedState.EMPTY_STATE as valid input. It checks for if > (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... > > For me it went wrong because 'savedState' is no longer the actual > BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it > (after the killed process has been restored/restarted) and this means > that the '!=' operator returns true and an exception is thrown. > > On Nov 24, 10:08 am, Mark Wyszomierski wrote: >> Hi, >> >> I'm testing how my app behaves when killed by the OS due to low memory >> conditions. I always have three activities on the stack, like: >> >> A B C (then C launches maps or some other heavy process) >> >> when my app is killed, and I return to it, C starts itself up again >> ok. When I hit the back button to go to B, I [sometimes] get an >> exception thrown which I can't trace. Output is below. I don't know >> where to go from here. I've only seen one other post mentioning this >> exception, but it was related to a reproducable error when rotating >> the device. This only happens sometimes. Thanks for any help: >> >> 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: >> thread main exiting due to uncaught exception >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): >> java.lang.RuntimeException: Unable to start activity ComponentInfo >> {com.test.android/com.test.android.ui.ActivityHello}: >> java.lang.IllegalArgumentException: Wrong state class -- expecting >> View State >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.app.ActivityThread.performLaunchActivity(ActivityThread.java: >> 2268) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: >> 2284) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.app.ActivityThread.access$1800(ActivityThread.java:112) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.os.Handler.dispatchMessage(Handler.java:99) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.os.Looper.loop(Looper.java:123) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.app.ActivityThread.main(ActivityThread.java:3948) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> java.lang.reflect.Method.invokeNative(Native Method) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> java.lang.reflect.Method.invoke(Method.java:521) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run >> (ZygoteInit.java:782) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> dalvik.system.NativeStart.main(Native Method) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): Caused by: >> java.lang.IllegalArgumentException: Wrong state class -- expecting >> View State >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.View.onRestoreInstanceState(View.java:5359) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.View.dispatchRestoreInstanceState(View.java:5335) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> 1093) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> 1097) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> 1097) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> 1097) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: >> 1097) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> android.view.View.restoreHierarchyState(View.java:5314) >> 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at >> com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState >> (Pho
[android-developers] Re: Activity [sometimes] throws Wrong state class exception when being resumed after kill
i've seen this too. I got around it by overriding the problematic View's onRestoreInstanceState method: public void onRestoreInstanceState(Bundle savedState) { ... ... super.onRestoreInstanceState(BaseSavedState.EMPTY_STATE); } I took a look at the android.view.View's implementation of this onRestoreInstanceState method and it only expects the BaseSavedState.EMPTY_STATE as valid input. It checks for if (savedState != BaseSavedState.EMPTY_STATE) then throw exception ... For me it went wrong because 'savedState' is no longer the actual BaseSavedState.EMPTY_STATE instance but a de-serialized copy of it (after the killed process has been restored/restarted) and this means that the '!=' operator returns true and an exception is thrown. On Nov 24, 10:08 am, Mark Wyszomierski wrote: > Hi, > > I'm testing how my app behaves when killed by the OS due to low memory > conditions. I always have three activities on the stack, like: > > A B C (then C launches maps or some other heavy process) > > when my app is killed, and I return to it, C starts itself up again > ok. When I hit the back button to go to B, I [sometimes] get an > exception thrown which I can't trace. Output is below. I don't know > where to go from here. I've only seen one other post mentioning this > exception, but it was related to a reproducable error when rotating > the device. This only happens sometimes. Thanks for any help: > > 11-24 07:52:12.469: ERROR/AndroidRuntime(5877): Uncaught handler: > thread main exiting due to uncaught exception > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): > java.lang.RuntimeException: Unable to start activity ComponentInfo > {com.test.android/com.test.android.ui.ActivityHello}: > java.lang.IllegalArgumentException: Wrong state class -- expecting > View State > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > 2268) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > 2284) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.ActivityThread.access$1800(ActivityThread.java:112) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.os.Handler.dispatchMessage(Handler.java:99) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.os.Looper.loop(Looper.java:123) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.ActivityThread.main(ActivityThread.java:3948) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > java.lang.reflect.Method.invokeNative(Native Method) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > java.lang.reflect.Method.invoke(Method.java:521) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run > (ZygoteInit.java:782) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > dalvik.system.NativeStart.main(Native Method) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): Caused by: > java.lang.IllegalArgumentException: Wrong state class -- expecting > View State > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.View.onRestoreInstanceState(View.java:5359) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.View.dispatchRestoreInstanceState(View.java:5335) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > 1093) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > 1097) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > 1097) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > 1097) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java: > 1097) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.view.View.restoreHierarchyState(View.java:5314) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState > (PhoneWindow.java:1501) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.Activity.onRestoreInstanceState(Activity.java:834) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.Activity.performRestoreInstanceState(Activity.java:800) > 11-24 07:52:12.539: ERROR/AndroidRuntime(5877): at > android.app.Instrumentation.callActivityOnRestoreInstanceState > (Instrumentation.java:1172) > 11-24 07:52:12.539: ERROR/AndroidRunti