面试知识点整理(Activity篇)

1.什么是Activity?

Activity,简单来说,就是一个和用户交互的接口。

2.Activity有哪些状态?

①Running状态(Active状态):当前Activity正处在运行状态,获取到了焦点。
②Paused状态:当前Activity处于暂停状态,指的是当前Activity失去焦点,此时的Activity并没有被销毁,内存里面的成员变量,状态信息等仍然存在,当然这个Activity也仍然可见,但是焦点却不在它身上,比如被一个对话框形式的Activity获取了焦点,或者被一个透明的Activity获取了焦点,这都能导致当前的Activity处于Paused状态。
③Stopped状态: Stopped状态下的Activity是完全不可见的,但是内存里面的成员变量,状态信息等仍然存在,但是也没有被销毁。
④Killed状态:表示当前的Activity已经被销毁,它的内存里面的成员变量,状态信息等都会被垃圾回收站回收。

3.Activity生命周期的分析

正常情况下的生命周期:
①onCreate():表示Activity 正在创建,常做初始化工作,如setContentView()界面资源、初始化数据。
②onStart():表示Activity 正在启动,这时Activity 可见但不在前台,无法和用户交互。
③onResume():表示Activity 获得焦点,此时Activity 可见且在前台并开始活动。
④onPause():表示Activity 正在停止,可做数据存储、停止动画等操作。
⑤onStop():表示activity 即将停止,可做稍微重量级回收工作,如取消网络连接、注销广播接收器等。
⑥onDestroy():表示Activity 即将销毁,常做回收工作、资源释放。
⑦onRestart():表示Activity由不可见到可见的过程,Activity重新启动。
对应的一些Activity生命周期流程的例子:
  Activity启动–>onCreate()–>onStart()–>onResume()
  点击home键回到桌面–>onPause()–>onStop()
  再次回到原Activity时–>onRestart()–>onStart()–>onResume()
  退出当前Activity时–>onPause()–>onStop()–>onDestroy()

Activity生命周期

4.处于运行状态的Activity即将执行onPause()函数,什么情况下促使Activity执行onPause()方法呢?

①启动了一个新的Activity
②返回上一个Activity
 可以理解为当需要其他Activity,当前的Activity必须先把手头的工作暂停下来,再来把当前的界面空间交给下一个需要界面的Activity,而onPause()方法可以看作是一个转接工作的过程,因为屏幕空间只有那么一个,每次只允许一个Activity出现在前台进行工作。通常情况下onPause()函数不会被单独执行,执行完onPause()方法后会继续执行onStop()方法,执行完onStop()方法才真正意味着当前的Activity已经退出前台,存在于后台。

5.Android什么时候只会调用onPause()而不会调用onStop()?

只有以下两种情况:
①当添加 android:theme="@android:style/Theme.Dialog" 。将所跳转的Activity(SecondActivity)修改为Dialog样式时。此时的生命周期为:
FirstActivity---onPause()
SecondActivity---onCreate()
SecondActivity---onStart()
SecondActivity---onResume()
FirstActivity---onResume()

②修改 AndroidManifest.xml中SecondAcitvity属性android:theme="@android:style/Theme.Translucent" 。此时的生命周期为:
FirstActivity---onPause()
SecondActivity---onCreate()
SecondActivity---onStart()
SecondActivity---onResume()
FirstActivity---onResume()

但是此两种情况实际开发中使用较少。

6.屏幕旋转时的生命流程?

onCreate()
onStart()
onResume()
onPause()
onSaveInstanceState()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState()
onResume
为了避免由于配置改变导致Activity重建,可在AndroidManifest.xml中对应的Activity中设置android:configChanges="orientation|screenSize"。此时再次旋转屏幕时,该Activity不会被系统杀死和重建,只会调用onConfigurationChanged。
 与横竖屏生命周期函数有关调用的属性是"android:configChanges",关于它的属性值设置影响如下:
orientation:消除横竖屏的影响
keyboardHidden:消除键盘的影响
screenSize:消除屏幕大小的影响

7.什么时候导致Activity的onDestory()不执行?

当用户后台强杀应用程序时,当前返回栈仅有一个activity实例时,这时候,强杀,是会执行onDestroy()方法的;当返回栈里面存在多个Activity实例时,栈里面的第一个没有销毁的activity执行会ondestroy方法,其他的不会执行;比如说:从mainactivity跳转到activity-A(或者继续从activity-A再跳转到activity-B),这时候,从后台强杀,只会执行mainactivity的onDestroy方法,activity-A(以及activity-B)的onDestroy方法都不会执行。

8.进程的优先级?

前台>可见>服务>后台>空
  前台:与当前用户正在交互的Activity所在的进程。
  可见:Activity可见但是没有在前台所在的进程。
  服务:Activity在后台开启了Service服务所在的进程。
  后台:Activity完全处于后台所在的进程。
  空:没有任何Activity存在的进程,优先级也是最低的。

9.Activity为什么需要启动模式?
 >我们都知道启动一个Activity后,这个Activity实例就会被放入任务栈中,当点击返回键的时候,位于任务栈顶层的Activity就会被清理出去,当任务栈中不存在任何Activity实例后,系统就回去回收这个任务栈,也就是程序退出了。假如这个Activity会被频繁启动,那岂不是会生成很多这个Activity的实例吗?对内存而言这可不是什么好事,明明可以一个Activity实例就可以应付所有的启动需求,为什么要频繁生成新的Activity实例呢?杜绝这种内存的浪费行为,所以Activity的启动模式就被创造出来去解决上面所描述的问题。

10.是否了解Activity的四种启动模式?

四种启动模式:Standerd、SingleTop、SingleTask、SingleInstance。
Standard(默认标准启动模式):每次启动都重新创建一个新的实例,不管它是否存在。且谁启动了这个Acitivity,那么这个Acitivity就运行在启动它的那个Acitivity的任务栈中。
SingleTop(栈顶复用模式):如果新的Activity已经位于任务栈的栈顶,那么不会被重新创建,而是回调onNewIntent()方法,通过此方法的参数可以取出当前请求的信息。
SingleTask(栈内复用模式):这是一种单例模式,在这种模式下,只要Acitivity在一个栈中存在,那么多次启动此Acitivity都不会重建实例,而是回调onNewIntent方法。同时由于SingleTask模式有ClearTop功能,因此会导致所要求的Acitivity上方的Acitivity全部销毁。
SingleInstance(单实例模式):和栈内复用类似,此种模式的Acitivity只能单独位于一个任务栈中,全局唯一性。单例实例,不是创建,而是重用。独占性,一个Acitivity单独运行在一个工作栈中。

11.如果假设A是Standard,B是SingleTop,C是SingleTask,D是SingleInstance的启动模式,那么以A->B->C->D->A->B->C->D这种情况开启Activity,分析一下最后的工作栈是怎样的情况?

此题在理解启动模式的情况下解答。

解答

以下有一篇文章Activity的启动模式有关于此题的介绍。

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

推荐阅读更多精彩内容