问题描述
|
当方向发生变化时,将调用生命周期的哪种方法?
我的应用程序执行
onResume()
方法或重新加载整个活动,因为我已经设置了一个布尔值来检查它是否第一次运行。方向发生变化时,我已经读过“ѭ1”,这是真的吗?
如何处理呢?
解决方法
有趣的一个...
活动是从“ 0”开始的,默认情况下您在XML中声明。
正如我从堆栈溢出问题的答案中发现的那样:
方向改变
onSaveInstanceState
暂停
onStop
onCreate
onStart
onRestoreInstanceState
onResume
切换到活动2
onSaveInstanceState
暂停
活动2期间的方向改变
onStop
onCreate
onStart
从Activity2切回
onResume
我猜是因为活动1在旋转时被隐藏了,所以没有调用“ 3”是因为没有“视图”(即,它不能被查看/查看)。同样,完全有可能有2个完全不同的纵向/横向布局文件,这些布局文件可能具有具有不同ID的不同UI元素。
结果,我想说的是,如果您想使用
onSaveInstanceState
中的捆绑包保存自己的数据,那么您需要在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)现在尝试更改屏幕方向(例如,从纵向=>横向模式)。
我希望这种替代方法可以使您对活动生命周期有更多的了解。