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