android 横竖屏切换后页面的生命周期变化
时间: 2023-09-19 22:07:08 浏览: 117
Android 应用程序在横竖屏切换后,系统会销毁当前 Activity 并重新创建一个新的 Activity 实例。因此,Activity 的生命周期会发生变化,具体如下:
1. 当屏幕由竖屏切换至横屏时,Activity 的生命周期如下:
```
onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume()
```
2. 当屏幕由横屏切换至竖屏时,Activity 的生命周期如下:
```
onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResume()
```
可以看到,无论是横向还是纵向切换,Activity 的生命周期都包含了两个周期:销毁周期和重建周期。在销毁周期中,系统会调用 `onPause()`、`onStop()` 和 `onDestroy()` 方法;在重建周期中,系统会调用 `onCreate()`、`onStart()` 和 `onResume()` 方法。
因此,在开发过程中,需要注意在销毁周期中保存必要的数据,以便在重建周期中恢复数据。同时,还需要在布局文件中设置合适的布局方式,以适应不同的屏幕方向。
相关问题
android 横竖屏切换后触摸没跟着调整
当Android设备横竖屏切换后,如果应用程序的触摸事件处理没有适配屏幕方向的变化(也称为屏幕旋转),用户可能会发现触摸操作不再按照预期的方向响应。这通常是由于开发者在编写代码时没有正确地注册并管理Activity的OrientationListener或者没有设置SurfaceView、RecyclerView等组件的layout_gravity。
解决这个问题需要做以下步骤:
1. **监听屏幕旋转**:在Activity中添加OrientationEventListener,以捕捉屏幕方向变化,并在onConfigurationChanged()方法中更新布局和触摸事件处理逻辑。
```java
public class MyActivity extends AppCompatActivity {
private OrientationEventListener mOrientationEventListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建监听器实例
mOrientationEventListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int orientation) {
// 更新UI和触摸事件处理
}
};
mOrientationEventListener.enable();
}
// ...其他代码...
}
```
2. **设置视图的布局方向**:使用`android:configChanges="orientation|screenSize"`属性告诉系统在屏幕旋转时不需要销毁和重建Activity,而是自动处理布局调整。
3. **适配触摸事件**:对于需要跟随屏幕方向的触摸控件,如LinearLayout或ScrollView,确保它们的`android:orientation`属性适应当前屏幕方向。
4. **重写onTouchEvent()`方法**:在父布局中处理滑动或点击事件时,可以检查触摸位置相对于屏幕的实际方向,而不是固定在原始的横屏或竖屏坐标上。
7.android横竖屏切换的时候Activity的生命周期
当Android设备的屏幕从横屏切换为竖屏,或者从竖屏切换为横屏时,Activity的生命周期会经历以下过程:
1. onPause(): 在屏幕旋转之前,系统会调用当前Activity的onPause()方法。这表示Activity正在失去焦点,并即将进入停止状态。
2. onSaveInstanceState(): 在屏幕旋转之前,系统会调用当前Activity的onSaveInstanceState()方法,用于保存Activity的状态信息。你可以在此方法中保存必要的数据,以便在Activity重新创建后进行恢复。
3. onStop(): 当屏幕旋转完成并且新的布局已经加载完毕后,系统会调用当前Activity的onStop()方法。此时,Activity已经完全不可见。
4. onDestroy(): 如果屏幕旋转导致当前Activity被销毁并重新创建,则系统会调用当前Activity的onDestroy()方法。你可以在此方法中释放资源和执行清理操作。
5. onCreate(): 在屏幕旋转导致Activity重新创建时,系统会调用当前Activity的onCreate()方法。你可以在此方法中重新初始化UI和恢复之前保存的数据。
6. onStart(): 在屏幕旋转之后,系统会调用当前Activity的onStart()方法。此时,Activity已经可见,但还没有获得焦点。
7. onResume(): 最后,系统会调用当前Activity的onResume()方法。在此方法中,你可以恢复之前的操作,并开始响应用户的交互。
需要注意的是,当屏幕旋转时,Activity会被销毁并重新创建,因此需要适当地处理数据保存和恢复的逻辑,以保证用户体验的连续性。可以使用onSaveInstanceState()方法保存和恢复Activity的状态信息,在onCreate()和onRestoreInstanceState()方法中进行处理。
阅读全文