Android 发生方向更改时调用哪个活动方法?

Android 发生方向更改时调用哪个活动方法?,android,android-activity,orientation,onresume,Android,Android Activity,Orientation,Onresume,当方向发生变化时,调用生命周期的哪个方法? 我的应用程序执行onResume()方法,或者重新加载整个活动,因为我设置了一个布尔值来检查它是否是第一次运行的。我读过onConfigurationChanged()在方向发生变化时开始,这是真的吗? 如何处理这个问题?有趣的一个 活动是startonResume(),默认情况下在XML中声明 正如我从关于堆栈溢出的问题中发现的,答案是: 方向改变 onSaveInstanceState 暂停 顶上 一次创建 启动 onRestoreInstanc

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

有趣的一个

活动是start
onResume()
,默认情况下在XML中声明

正如我从关于堆栈溢出的问题中发现的,答案是:

方向改变
  • onSaveInstanceState
  • 暂停
  • 顶上
  • 一次创建
  • 启动
  • onRestoreInstanceState
  • 恢复
切换到活动2
  • onSaveInstanceState
  • 暂停
活动2中的方向变化
  • 顶上
  • 一次创建
  • 启动
从活动2切换回
  • 恢复
我猜,因为活动1在旋转时是隐藏的,
onrestoreinnstancestate
没有被调用,因为没有“视图”(即,它不能被看到/查看)。此外,完全可能有两个完全不同的纵向/横向布局文件,它们可能具有具有不同ID的不同UI元素

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

特别是,您可以维护“最后一个已知”方向字段,以便
onCreate
知道它需要处理您自己的数据,因为方向已更改,而不是依赖于调用
onRestoreInstanceState

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) 现在尝试更改屏幕方向(例如,从纵向=>横向模式)


我希望这个替代方案能让您更深入地了解活动生命周期。

如果我添加android:configChanges=“orientation”,整个活动将不会重新启动,而是OnConfiguration Changed()将被调用?请记住,纵向和横向可以有单独的布局-然后您的活动需要重新创建/重新展开。@Marcin Gil我有一张地图,我在用户位置上绘制了图形,但当定向发生时,图形将被删除。我想保留这个。我已经创建了reDraw()方法来重新绘制位置,但应用程序会重新启动整个活动…请参见此处:实际上方向更改=
onPause
->
onSave…
->
onStop
->
onCreate
->
onStart
是的,在所有情况下,
onPause
都是第一步,然后,
onSaveInstanceState
根据android文档,没有人能够预测onSaveInstanceState将在onPause之前还是之后被调用。我们只能肯定地说,onSaveInstanceState是在onStop^^之后调用的,这是不正确的。我们只能说onSaveInstanceState是在onStop之前调用的->“如果调用,此方法将发生在onStop()之前。对于它是发生在onPause()之前还是之后,没有任何保证。”在我的情况下,
onDestroy
也会在旋转时被调用