当屏幕方向发生改变时,生命周期的哪个方法会被调用?我的应用程序执行 onResume()
方法或者重新加载整个活动,因为我设置了一个布尔值来检查它是否是第一次运行。我读到 onConfigurationChanged()
在屏幕方向改变时开始工作,这是真的吗?如何处理这种情况?
当屏幕方向发生改变时,生命周期的哪个方法会被调用?我的应用程序执行 onResume()
方法或者重新加载整个活动,因为我设置了一个布尔值来检查它是否是第一次运行。我读到 onConfigurationChanged()
在屏幕方向改变时开始工作,这是真的吗?如何处理这种情况?
有趣的问题...
默认情况下,活动在XML中声明了onResume()
。
根据stackoverflow上的问题答案所述:
我猜因为旋转时Activity 1被隐藏,因此不会调用onRestoreInstanceState
,因为没有“视图”(即无法看到/查看)。另外,可能会有两个完全不同的布局文件用于纵向/横向,它们可能具有不同的UI元素和不同的ID。
因此,如果您想在onSaveInstanceState
中使用Bundle保存自己的数据,则需要在您的onCreate
(在Activity 1中)中添加额外的逻辑来处理您自己的数据(以及在onRestoreInstanceState
中有条件地这样做)。
特别地,您可以维护一个“最后已知方向”字段,以便onCreate
知道它需要处理您自己的数据,因为方向已更改,而不是依赖于调用onRestoreInstanceState
。
onPause
-> onSave...
-> onStop
-> onCreate
-> onStart
-> onResume
。请注意,这里只是翻译原文,没有添加额外的解释或信息。 - MaxonPause
都会先执行,然后才是 onSaveInstanceState
。 - Max IvashkevichonDestroy
方法也会被调用。 - Vivek Mishrapublic 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 => 在窗口顶部选择详细信息。
2) 现在尝试更改屏幕方向(例如从纵向 => 横向模式)。
我希望这种替代方法能够更好地了解活动生命周期。