Activity的介绍和使用(1)

一、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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,结合资料本文将对Activity生...
    老勇阅读 711评论 2 3
  • 一、Activity的生命周期 本节内容将生命周期的情况分为两部分介绍,第一部分先了解典型的生命周期的7个部分及A...
    小池laucherish阅读 543评论 0 0
  • Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等...
    岳小川阅读 468评论 0 3
  • 一、把第一个程序运行起来。 二、Android程序结构解释 三、Activity是什么 Activity是Andr...
    joy_蓝蜘蛛阅读 641评论 0 0
  • 一直都有提笔想写些什么,但每每提笔,又无从下手,感觉一切都是混乱的,没有自成体系。近来正好闲暇颇多,便下决心整理一...
    随风_04a7阅读 591评论 0 2