美文网首页
Activity的介绍和使用(1)

Activity的介绍和使用(1)

作者: 小迷糊_dcee | 来源:发表于2021-03-03 16:18 被阅读0次

    一、Activity的介绍

    Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。在Android App 中只要能看见的几乎都要依托于Activity,所以Activity是在开发中使用最频繁的一种组件

    二、Activity的生命周期

    官方提供的生命周期切换图


    39dc804c143bc0e61b6a51666b5890e.png
    onCreate:表示activity正在被创建,这是生命周期的第一个方法,在这个方法中我们可以做一些初始化工作,比如调用setContentView去加载界面布局和初始化所需数据等。
    onRestart:表示1activity正在被重新打开,一般情况下,当1activity由不可见变成可见会调用onRestart方法。比如用户按home键,手机回到桌面或者重新打开一个新的2activity,接着用户回到1activity事,会重新调用1activity的onRestart方法。
    onStart:表示activity正在被启动,即将展示出来,这时activity是可见的,但是没有展示在前台,也无法和用户进行交互。这个时候可以理解为activity已经创建出来,但是我们看不到。
    onResume:表示activity已经可见了,并且出现在前台并开始活动。和onStart的区别是,activity都创建出来了,但是在onStart时候,activity在后台活动(不可见),onResume时候,activity在前台活动(可见)
    onPause:表示activity正在停止,这个方法最好不要太耗时的操作,因为会影响新activity的显示。比如在1activity中启动2activity,会先调用1activity的onPause方法,然后才会调用2activity的onResume方法。
    onstop:表示activity即将停止,可以做一些重量级的回收工作,同样不同台耗时。
    onDestro:表示activity即将销毁,这是activity的生命周期的最后一个回调,我们可以做一些回收工作和资源的释放。



    三、正常情况下生命周期调用分析

    1、第一次启动一个1activity,回调如下onCreate->onStart->onResume
    2、当点击home按钮之后,回调如下onPause->onStop
    3、当重新启动1activity,回调如下onRestart->onStart->onResume
    4、在1activity中启动新的2activity,回调如下1onPause->2onCreate->2onStart->2onResume->1onStop(注:如果启动的2activity设置透明主题,1不会走onStop方法)
    5、点击back按钮,返回1activity,回调如下2onPause->1onRestart->1onStart->1onResume->2onStop->2onDestroy
    6、息屏状态及设备屏幕被点亮,回调如下onPause->onStop->onRestart->onStart->onResume

    四、异常情况下的生命周期分析

    保存数据和数据的回复

    保存数据onSaveInstanceState

    activity在异常情况下终止,activity会在onStop之后,通过onSaveInstanceState方法的bundle对象保存数据,并把数据传递给onRestoreInstanceState和onCreate方法。(在1activity中启动2activity,也会调用onSaveInstanceState方法)

    恢复数据onRestoreInstanceState

    activity被异常销毁之后,重建activity会在onStart之后调用onRestoreInstanceState方法,并获取bundle数据,获取销毁之前的activity数据。因此我们也可以通过onRestoreInstanceState和onCreate方法判断activity是否被重建(1activity中启动2activity,点击back按钮,不会调用这个方法)


    同时,我们要知道,在onSaveInstanceState和onRestoreInstanceState方法中,系统自动会帮我做一定的恢复工作。当activity在异常状态下需要重建时,系统会帮我们保存当前activity的视图结构,并且在activity重启为我们恢复这些数据,比如文本框用户输入的数据,listView滚动的位置等,这些view相关的状态系统都会默认为我们恢复。恢复的原因是view和activity一样,有onSaveInstanceState和onRestoreInstanceState方法。

    1、横竖屏切换生命周期的回调及状态的保存

    回调如下:onPause->onStop->OnSaveInstanceState->onDestroy->onCreate->onStart->onRestoryInstanceState->onPause

    2、资源内存不足优先级低的activity被回收,生命周期的回调及状态的保存

    activity的优先级

    1、前台activity---正在和用户交互的activity
    2、可见单非前台activity---activity弹出对话框,导致activity可见但不可交互
    3、后台activity--已经暂停的activity,比如执行了onStop,优先级最低


    当系统内存不足时,会安装优先级杀掉目标activity所在的进程,并通过onSaveInstanceState和onRestoreInstanceState方法保存和恢复数据。

    五、android:ConfigChanges,用于捕获手机状态的改变

    android中的组件Activity在manifest.xml文件中可以指定参数android:ConfigChanges,用于捕获手机状态的改变。 在Activity中添加了android:configChanges属性,在当所指定属性(Configuration Changes)发生改变时,通知程序调用onConfigurationChanged()函数。
    设置方法:将下列字段用“|”符号分隔开,例如:“locale|navigation|orientation”


    de84fb75cb6e0a95951b921b7d25987.png

    横竖屏切换的时候,不重新构建activity方法

    在manifest.xml文件中,给activity添加配置configChange

    <activity android:name=".MainActivity" android:configChanges="orientation|screenSize" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    

    并且在activity中重写onConfigurationChanged方法

    override fun onConfigurationChanged(newConfig: Configuration) {
            super.onConfigurationChanged(newConfig)
            Log.d("ysl","onConfigurationChanged")
            when (newConfig.orientation) {
                Configuration.ORIENTATION_LANDSCAPE -> {
                    //横屏
                }
                Configuration.ORIENTATION_PORTRAIT -> {
                    //竖屏
                }
                else->{
    
                }
            }
        }
    

    当activity配置android:configChanges="orientation|screenSize" ,横竖屏切换不会调用onSaveInstanceState和onRestoreInstanceState方法,只会调用onConfigurationChanged方法。

    六、禁止屏幕旋转的方法

    1、在AndroidManifest.xml中设置activity 中的android:screenOrientation 属性值
    2、在Activity 中调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

    相关文章

      网友评论

          本文标题:Activity的介绍和使用(1)

          本文链接:https://www.haomeiwen.com/subject/mngxqltx.html