当方向发生变化时,会调用生命周期的哪个方法?
我的应用程序执行onResume()
方法或者可能重新加载整个活动,因为我设置了一个布尔值来检查它是否是第一次运行。当方向发生变化时,我已经阅读了onConfigurationChanged()
,这是真的吗?
如何处理?
答案 0 :(得分:34)
有趣的人......
活动开始onResume()
默认情况下在XML中声明。
正如我从堆栈溢出的问题回答中发现的那样:
我猜测因为活动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)现在尝试更改屏幕方向(例如,从纵向=>横向模式)。
我希望这种替代方法可以使您对活动生命周期有更多的了解。