简体   繁体   中英

onRestoreInstanceState() not being called when it is expected

I have run into some trouble lately with onSaveInstanceState() and onRestoreInstanceState() . I have multiple activities that use these methods to save state in the case that they are cleaned up by the system. Most of them work, except for one, and I have no idea why.

What specifically happens is this:

  • I have my emulator running, and the dev tools setup to destroy() all activities when they are no longer visible. (So that I can prove that save/restore are working properly.)
  • The Activity in question is started up, and I proceed to change some of its state.
  • I start a new Activity, let it run for a moment, and then use the 'back' button to go to my previous Activity.
  • Upon arriving back at the Activity in question, I notice that the default state is back, thus, it does not have the state it should.

I have noticed that the onSaveInstanceState() is called, onCreate() is called, but has a null bundle, and onRestoreInstanceState() is never called.

Has anyone seen this before?

I believe I have figured out the issue, and it is with details that I did not disclose in the original question.

One of the things I am saving in my bundle is quite large (a 500x1000 pixel Bitmap). When I removed that from my Bundle, everything else was saved, the onCreate() method was called with the Bundle, and onRestoreInstanceState() was called as well.

Thus I believe there is a maximum size Bundle that you can save in onSaveInstanceState(), which is not documented. (at least as far as I can tell)

The dev tools setting you are using may not have the behavior you expect.

If you want to test onSaveInstanceState() / onRestoreInstanceState() , the simplest thing to do is to change the orientation ( <Ctrl>-<F11> ). By default, your activity is destroyed and recreated, using the instance state.

在另一个问题的线程中给出了为什么没有调用onRestoreInstanceState() (或者更多peciselly:调用它)的原因: onSaveInstanceState()和onRestoreInstanceState()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM