美文网首页
面试知识点整理(Activity篇)

面试知识点整理(Activity篇)

作者: 念人远乡 | 来源:发表于2019-02-14 20:00 被阅读37次

    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的启动模式有关于此题的介绍。

    相关文章

      网友评论

          本文标题:面试知识点整理(Activity篇)

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