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都有它的生命周期。在横竖屏切换的过程中,如果开发者不能正确处理,则会导致可见性问题或数据丢失等问题。通过禁止横屏模式和状态保存等方式,可以避免这些问题。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/227701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-09 16:31
下一篇 2024-12-09 16:31

相关推荐

  • Android ViewPager和ScrollView滑动冲突问题

    Android开发中,ViewPager和ScrollView是两个常用的控件。但是当它们同时使用时,可能会发生滑动冲突的问题。本文将从多个方面介绍解决Android ViewPa…

    编程 2025-04-28
  • Android如何点击其他区域收起软键盘

    在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。 一、获取焦点并显示软键盘 在Andro…

    编程 2025-04-28
  • Android Studio HUD 实现指南

    本文将会以实例来详细阐述如何在 Android Studio 中使用 HUD 功能实现菊花等待指示器的效果。 一、引入依赖库 首先,我们需要在 build.gradle 文件中引入…

    编程 2025-04-27
  • Android和Vue3混合开发方案

    本文将介绍如何将Android和Vue3结合起来进行混合开发,以及其中的优势和注意事项。 一、环境搭建 在进行混合开发之前,需要搭建好相应的开发环境。首先需要安装 Android …

    编程 2025-04-27
  • Android Java Utils 可以如何提高你的开发效率

    Android Java Utils 是一款提供了一系列方便实用的工具类的 Java 库,可以帮助开发者更加高效地进行 Android 开发,提高开发效率。本文将从以下几个方面对 …

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论