当方向改变发生时,生命周期的哪个方法被调用?我的应用程序执行该onResume()
方法或者可能重新加载整个活动,因为我设置了一个布尔值来检查它是否是第一次运行。我读过onConfigurationChanged()
当方向改变发生时开始,是真的吗?如何处理?
问问题
39993 次
2 回答
44
一个有趣的...
Activity is startonResume()
是您默认在 XML 中声明的。
正如我从关于堆栈溢出的问题答案中发现的那样:
方向改变
- onSaveInstanceState
- 暂停
- 停止
- 创建
- 开始
- onRestoreInstanceState
- 恢复
切换到活动 2
- onSaveInstanceState
- 暂停
在活动 2 中改变方向
- 停止
- 创建
- 开始
从 Activity2 转回
- 恢复
我猜是因为 Activity 1 在旋转时被隐藏,onRestoreInstanceState
所以不会因为没有“视图”而被调用(即,它不能被看到/查看)。此外,完全有可能拥有 2 个完全不同的纵向/横向布局文件,它们可能具有具有不同 ID 的不同 UI 元素。
因此,我想说如果你想使用 BundleonSaveInstanceState
来保存你自己的数据,那么你需要在你的onCreate
(在活动 1 中)添加额外的逻辑来处理你自己的数据(以及有条件地在onRestoreInstanceState
)。
特别是,您可以维护一个“最后已知”的方向字段,以便onCreate
知道它需要处理您自己的数据,因为方向已经改变,而不是依赖于onRestoreInstanceState
被调用。
于 2011-06-11T12:40:01.250 回答
4
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 => 选择详细。
2) 现在尝试更改屏幕方向(例如从纵向 => 横向模式)。
我希望这个替代方案能让您更深入地了解活动生命周期。
于 2018-08-06T17:29:45.907 回答