当方向发生变化时,会调用哪种活动方法?

时间:2011-06-11 12:25:13

标签: android android-activity orientation onresume

当方向发生变化时,会调用生命周期的哪个方法? 我的应用程序执行onResume()方法或者可能重新加载整个活动,因为我设置了一个布尔值来检查它是否是第一次运行。当方向发生变化时,我已经阅读了onConfigurationChanged(),这是真的吗? 如何处理?

2 个答案:

答案 0 :(得分:34)

有趣的人......

活动开始onResume()默认情况下在XML中声明。

正如我从堆栈溢出的问题回答中发现的那样:

方向改变

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

切换到活动2

  • 的onSaveInstanceState
  • 的onPause

方向在活动2中改变

  • 的onStop
  • 的onCreate
  • 在onStart

从Activity2返回

  • 的onResume

我猜测因为活动1在轮换时被隐藏,所以onRestoreInstanceState没有被调用,因为没有'视图'(即,它无法被查看/查看)。此外,完全可以为纵向/横向设置2个完全不同的布局文件,这些文件可能具有不同ID的不同UI元素。

因此,我想说如果你想在onSaveInstanceState中使用Bundle保存自己的数据,那么你需要在onCreate(在活动1中)添加额外的逻辑来在那里处理您自己的数据(以及在onRestoreInstanceState中有条件地执行此操作。)

特别是,您可以维护“上次已知”的方向字段,以便onCreate知道它需要处理您自己的数据,因为方向已更改,而不是依赖于onRestoreInstanceState被调用。< / p>

答案 1 :(得分:0)

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)尝试在手机和/或仿真器上运行您的应用程序,然后打开Logcat =>在窗口顶部选择Verbose。

2)现在尝试更改屏幕方向(例如,从纵向=>横向模式)。

我希望这种替代方法可以使您对活动生命周期有更多的了解。