Gracefully handling screen orientation change during activity start

Posted by Steve H on Stack Overflow See other posts from Stack Overflow or by Steve H
Published on 2010-03-12T16:19:37Z Indexed on 2010/03/12 17:17 UTC
Read the original article Hit count: 298

Filed under:

I'm trying to find a way to properly handle setting up an activity where its orientation is determined from data in the intent that launched it. This is for a game where the user can choose levels, some of which are int portrait orientation and some are landscape orientation. The problem I'm facing is that setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) doesn't take effect until the activity is fully loaded. This is a problem for me because I do some loading and image processing during startup, which I'd like to only have to do once.

Currently, if the user chose a landscape level:

  • the activity starts onCreate(), defaulting to portrait
  • discovers from analysing its launching Intent that it should be in landscape orientation
  • continues regardless all the way to onResume(), loading information and performing other setup tasks
  • at this point setRequestedOrientation kicks in so the application runs through onPause() to onDestroy()
  • it then again starts up from onCreate() and runs to onResume() repeating the setup from earlier

Is there a way to avoid that and have it not perform the loading twice? For example, ideally, the activity would know before even onCreate was called whether it should be landscape or portrait depending on some property of the launching intent, but unless I've missed something that isn't possible. I've managed to hack together a way to avoid repeating the loading by checking a boolean before the time-consuming loading steps, but that doesn't seem like the right way of doing it. I imagine I could override onSaveInstanceState, but that would require a lot of additional coding. Is there a simple way to do this?

Thanks!

© Stack Overflow or respective owner

Related posts about android