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的生命明周期:
- 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'
standard(标准模式):
standard 启动模式每次都会创建新的实例,每次点击都会创建新的Activity覆盖在原Activity。
singleTop:
如果栈顶的Activity为SingleTop模式,如果将要开启的Activity为当前栈顶的Activity时就会直接复用栈顶的Activity。不再重新创建。
singleTask:
这种模式会检测整个Activity栈中是否存在当前需要启动的Activity,如果存在就将该Activity移动到栈顶,并将该Activity以上的Activity都销毁。
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