Which activity method is called when orientation changes occur?

吃可爱长大的小学妹 提交于 2019-11-28 06:16:59
Siten

Interesting one...

Activity is start onResume() is which you declare in your XML by default.

And as I found from question answer on stack overflow is:

Orientation Change

  • onSaveInstanceState
  • onPause
  • onStop
  • onCreate
  • onStart
  • onRestoreInstanceState
  • onResume

Switch TO Activity 2

  • onSaveInstanceState
  • onPause

Orientation Change WHILE IN Activity 2

  • onStop
  • onCreate
  • onStart

Switchback BACK FROM Activity2

  • onResume

I'm guessing that because Activity 1 is hidden at the time of rotation, onRestoreInstanceState isn't called because there is no 'view' (i.e., it can't be seen/viewed). Also, it is entirely possible to have 2 completely different layout files for portrait/landscape which potentially have different UI elements with different IDs.

As a result, I'd say if you want to use the Bundle in onSaveInstanceState to save your own data, then you need to add extra logic in your onCreate (in Activity 1) to process your own data there (as well as doing it conditionally in onRestoreInstanceState).

In particular, you could maintain a 'last known' orientation field so that onCreate knows that it needs to process your own data because orientation has changed, rather than relying on onRestoreInstanceState being called.

public class MainActivity extends AppCompatActivity {
private final static String TAG = "AppActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate(Bundle) called");
    setContentView(R.layout.activity_main);
}

@Override
public void onStart() {
    super.onStart();
    Log.d(TAG, "onStart() called");
}

@Override
public void onPause() {
    super.onPause();
    Log.d(TAG, "onPause() called");
}

@Override
public void onResume() {
    super.onResume();
    Log.d(TAG, "onResume() called");
}

@Override
public void onStop() {
    super.onStop();
    Log.d(TAG, "onStop() called");
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy() called");
}

}

1) Try to run your app on your phone and/or emulator and open the Logcat => on top of the window select Verbose.

2) Now try to change the screen orientation (ex. from portrait => landscape mode).

I hope this alternative will give you more insight into the activity lifecycle.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!