您的位置:

Android横竖屏切换生命周期详解

一、Activity的生命周期

在Android中,Activity是一个非常基础的概念。一个应用程序可以有多个Activity,每个Activity都有它的生命周期。关于Activity的生命周期,Android官方文档中有很详细的介绍。在这里,我们简单介绍一下常见的生命周期方法:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

}

Activity的生命周期方法可以分为以下几类:

1. 创建类方法

onCreate():当Activity第一次创建时调用。通常用来做一些创建初始化工作,比如声明UI和逻辑变量,绑定视图等。

2. 可见类方法

onStart():当Activity从不可见变为可见时调用。通常做一些重启一些资源和服务的工作。

onResume():当Activity开始与用户进行交互时调用。通常在这里开始动画,播放音乐和位置信息等。

3. 暂停类方法

onPause():当Activity即将变为不可见时调用。通常做一些资源释放和存储工作。

onStop():当Activity不再可见时调用。通常做一些存储和清理工作。

4. 销毁类方法

onDestroy():当Activity被销毁时调用。通常做一些资源释放工作。

二、横竖屏切换的生命周期

从Activity的生命周期中可以看出,当屏幕旋转时,Activity并没有结束,只是重新开始了自己的生命周期。需要注意的是,如果应用程序没有正确处理横竖屏切换的情况,可能会导致一些可见性的问题或重复创建视图等。下面我们来看一下横竖屏切换后Activity生命周期的变化:

1. 切换前

onPause() -> onStop() -> onDestroy()

2. 切换后

onCreate() -> onStart() -> onResume()

可以看到,切换后Activity经历了一个完整的生命周期,并且重新创建了UI等基础组件和资源。

三、如何处理横竖屏切换

为了避免横竖屏切换带来的问题,开发者需要对横竖屏切换进行正确处理。下面提供几种处理方式:

1. 禁止横竖屏切换

可以通过在AndroidManifest.xml文件中对Activity进行设置,禁止横屏模式:

<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden"
    android:label="@string/app_name" >
</activity>

其中,screenOrientation属性设置为portrait表示禁止横屏模式,configChanges属性表示当屏幕方向发生变化时,不重组Activity以及不做出任何修改,仅仅通过onConfigurationChanged()进行回调通知。

2. 横竖屏切换时保存状态

Activity在横竖屏切换时,会重新创建UI等基础组件和资源。如果在这个过程中不对状态进行保存,则会导致UI显示不正确或数据丢失等问题。可以通过保存状态的方式来避免这个问题。

要保存Activity的状态,首先需要重写onSaveInstanceState()方法:

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString("my_data_key", mData);
    super.onSaveInstanceState(outState);
}

在onSaveInstanceState()方法中,可以将重要的数据保存在Bundle中。Bundle是一个键值对的映射,保存在其中的数据可以在Activity恢复时取回。再重写onCreate()方法,取回保存在Bundle中的数据:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        mData = savedInstanceState.getString("my_data_key");
    }
    setContentView(R.layout.activity_main);
}

在onCreate()方法中,检查Bundle是否包含保存的数据,如果有,则取回。

四、总结

Android中,Activity是一个重要的组件,每个Activity都有它的生命周期。在横竖屏切换的过程中,如果开发者不能正确处理,则会导致可见性问题或数据丢失等问题。通过禁止横屏模式和状态保存等方式,可以避免这些问题。

Android横竖屏切换的生命周期管理

Android设备支持横向和纵向两种屏幕方向,应用程序在不同的方向下可能会有不同的布局和展示效果。然而,当用户旋转设备屏幕时,应用程序并不一定会正确地重新加载并展示内容,这可能会导致崩溃或不完整的界面

2023-12-08
Android横竖屏切换生命周期详解

2023-05-20
Android屏幕方向切换实现方法

2023-05-14
Android App 强制横屏实现方法

2023-05-14
Android应用生命周期详解

2023-05-14
Android 如何使用 configChanges 优化

2023-05-14
Android日历开发全方位详解

2023-05-19
Android屏幕方向控制: android:screenO

2023-05-22
Android开发中必备的生命周期理解

2023-05-14
setRequestedOrientation方法的详解

2023-05-24
Android onResume 方法怎么使用

一、原理介绍 Android 的生命周期方法是指在 Activity 生命周期中被 Android 系统调用的一系列方法,onResume() 是生命周期中的一个方法,当 Activity 重新回到屏

2023-12-08
Android应用程序中的屏幕方向控制

2023-05-14
Android旋转详解

2023-05-22
Fragment切换详解

2023-05-20
Android Application生命周期

2023-05-16
Android Activity生命周期及应用场景

2023-05-20
Android Activity 生命周期:理解Androi

Android应用的核心是Activity,它是用户与应用程序交互的窗口。一个Activity可以简单地理解为用户与应用的一个窗口,因此,Android中的Activity生命周期管理也非常重要,它可

2023-12-08
印象笔记记录java学习(Java成长笔记)

2022-11-12
Android横屏适配:让用户体验更佳

2023-05-14
iOS生命周期详解

2023-05-22