27
2017
09

Activity面试题目整理

Activity面试题目整理

什么是Activity?

官方的说法:

Activity是一个应用程序的组件,它提供一个屏幕用来与用户进行交互,以便做一些诸如拨打电话、发送邮件和查看地图之类的事情。

An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.

Activity的四种状态:

  • Running(运行): 在屏幕前台(位于当前任务栈的顶部)
  • Paused(暂停): 失去焦点但仍然对用户可见,但不可与用户进行交互(覆盖Activity可能是一个透明的窗体,或未完全遮挡的dialog)
  • Stopped(停止):不可见状态,被另一个Activity覆盖
  • Destroyed(销毁): 退出状态,被完全销毁

Activity的生命明周期:

image

  • Activity启动: onCreate() -> onStart() ->onResume()
  • 点击Home键返回主界面(Activity不可见): ->onPause() -> onStop()
  • 当再次回到原Activity时 ->onRestart() ->onStart() ->onResume()
  • 当退出当前Activity时 ->onPause() ->onStop() ->onDestroy()

Android进程优先级:

  • 前台进程 (Activity可见时可与用户交互)
  • 可见进程 (声明周期处在onPause()的阶段)
  • 服务进程 (Service)
  • 后台进程 (Activity不可见的时候)
  • 空进程

Android的任务栈:

栈的特点: 后进先出

用于存储开启的Activity

Activity的启动模式

通过在 AndroidMainifest.xml中给activity标签指定

android: launchMode='singleTop'
  1. standard(标准模式):

    standard 启动模式每次都会创建新的实例,每次点击都会创建新的Activity覆盖在原Activity。

  2. singleTop:

    如果栈顶的Activity为SingleTop模式,如果将要开启的Activity为当前栈顶的Activity时就会直接复用栈顶的Activity。不再重新创建。

  3. singleTask:

    这种模式会检测整个Activity栈中是否存在当前需要启动的Activity,如果存在就将该Activity移动到栈顶,并将该Activity以上的Activity都销毁。

  4. singleInstance
    申明为singleInstance的Activity会出现在一个新的任务栈当中,而且该任务栈中只存在这一个Activiy实例

scheme跳转协议

android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过自定义自己的scheme协议,可以非常方面跳转app内的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,也可以通过H5页面跳转到App内页面等。

  • URL scheme的格式

    遵循RFC 1808(Relative Uniform Resource Locators)标准,与常见的网页内容的URL格式一样。

    一个普通的URL分为scheme、host、relativePath、query

在Androidmanifest.xml中定义scheme

<!-- scheme协议 -->
        <activity  Android:name=".UI.translate.NativeAppActivity" Android:label="@string/app_name">

            <!-- 要想在别的App上能成功调起App,必须添加intent过滤器 -->
            <intent-filter>

                <!-- 协议部分,随便设置 -->
                <data Android:scheme="uumobile" />
                <!-- 下面这几行也必须得设置 -->
                <category Android:name="Android.intent.category.DEFAULT" />
                <category Android:name="Android.intent.category.BROWSABLE" />

                <action Android:name="Android.intent.action.VIEW" />
            </intent-filter>
        </activity>

Activity状态的保存与恢复

当系统内存不足等这些极端的条件下,系统会强制的回收调一些不可见的Activity以节省内存资源,因此在Activity销毁之前需要根据应用场景对Activity中的一些状态进行保存。

  • onSaveInstanceState()

    onSaveInstanceState()方法用来在Activity被强制销毁之前保存数据,onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据。

  • onRestoreInstanceState()

    onRestoreInstanceState()方法用来取得之前在onSaveInstanceState()保存的值。

  • 适用的场景:

    横屏竖屏切换时,因为Activity肯定会被销毁然后重新创建,所以Activity的数据保存和读取都发生了,这种情况日常很常见,比如:
    使用优酷等视频APP看视频时我们经常会在横屏和竖屏间切换(看视频:横屏,中途来了电话:竖屏,接完电话继续看视频:横屏),当切换横竖屏时,正在观看中的视频并没有从头播放,而是从中断处继续播放,这就是因为横竖屏切换时视频的播放进度被事先保存了起来,当切换完成后取出之前保存的进度,继续播放。

参考博客: http://blog.csdn.net/qq_19560943/article/details/55051168

参考博客 http://blog.csdn.net/qq_23547831/article/details/51685310

参考博客: http://blog.csdn.net/timejay/article/details/52838221

上一篇:Flexbox简介 下一篇:Fragment面试题目整理