android面试(2)-Activity篇

今天正式开始Android篇的面试题,先从最熟悉的总结吧。

Activity我相信只要学过Android开发的接触最多的就是这个组件了吧,Android四大组件的头牌,得好好说道说道。

提到Activity,涉及的东西真的还挺多,什么生命周期啊,启动模式啊,进程优先级啊,别着急,一个一个来。

1.概念:

Android开发中提供给用户进行滑动触摸等操作的界面。

2.Activity四种状态:

(1)running:正在活动状态

(2)paused:暂停状态,失去与用户交互的能力

(3)stop:停止状态,被另一个Activity完全覆盖

(4)killed:销毁状态,已被回收

3.生命周期:

(1)正常状态:

(A)Activity启动:onCreated()->onStarted()->onResume();先后经历,被创建->正在启动,此时可见但不可访问->启动成功,此时可见并且可以访问

(B)点击Home键回到主界面(Activity不可见):onPause()->onStop();

(C)再次点击图标回到Activity:onReStart()->onStart()->onResume();先后经历,正在重新启动Activity->正在启动->启动成功

(D)退出当前Activity:onPause()->onStop()->onDestroy();

问题一个:旧的Activity的onPause()和新的Activity的onResume()谁先被执行?

答:onPause()先执行,在新的Activity启动之前,栈顶的Activity需要先onPause()之后,新的Activity才能启动;

(2)非正常情况:

(A)由于资源相关的系统配置发生改变时导致Activity被杀死并重新创建(如横竖屏的切换)

先调用onSavedInstanceState()保存数据->重新创建onCreate()->调用onRestoreInstanceState()恢复数据

tips1:恢复哪些数据呢?

视图结构,文本框中输入的数据,ListView的滚动位置等

tips2:保存和恢复View层次结构的工作流程:

首先会调用onSaveInstanceState()保存数据,然后Activity会委托Window去保存数据,window再委托它上面的顶层容器(ViewGroup),一般来说是DecorView,最后由DecorView会通知它的子元素去保存数据。

(B)资源内存不足导致低优先级的Activity被杀死

这种情况和情况A的数据保存与恢复是一样的,但这里想说说进程的优先级;

总的来说,Android里大致分为五大进程,优先级从高到低

(a)前台进程:正在与用户交互的进程,或者是与前台Activity绑定的Service;

(b)可见进程:不可交互但可见的进程;

(c)服务进程:后台不可见正在运行的进程

(d)后台进程:已经被暂停的Activity

(e)空进程:优先级最低

tips3:防止Activity在屏幕旋转是重新创建,给ConfigChanges添加orientation;

4.Android任务栈:(Activity的启动模式)

(1)Standard:标准启动模式,每次启动一个Activity都会重新创建一个新的实例

(2)SingleTop:栈顶复用模式,如果新的Activity已经位于任务栈内的栈顶,那么此Activity不会被重新创建,调用onNewIntent()方法

(3)SingleTask:栈内复用模式,只要Activity在一个栈内存在,那么多次启动此Activity都不会重新创建实例

(4)SingleInstance:单实例模式,加强版的SingleTask,具有此种模式的Activity只能单独位于一个任务栈中;

最后一波福利~:灰常有用的tips,URLSchema(页面内跳转协议)

1.概念:是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的Schema协议,可以非常方便的跳转App中的各个页面;

那么什么是Scheme协议呢?

URL Schema协议格式:

先来个完整的URL Schema协议格式: 

xl://goods:8888/goodsDetail?goodsId=10011002 
通过上面的路径 Schema、Host、port、path、query全部包含,基本上平时使用路径就是这样子的。

 •xl代表该Schema 协议名称
 •goods代表Schema作用于哪个地址域
 •goodsDetail代表Schema指定的页面
 •goodsId代表传递的参数
 •8888代表该路径的端口号

2.应用场景:

(1)服务器下发跳转路径,客户端根据服务器下发的路径跳转到相应页面;

(2)H5页面点击锚点,根据锚点具体跳转路径,App跳转到具体的页面;

(3)App端收到服务器端下发的PUSH通知栏消息,根据消息跳转到相应页面;

3.应用实例:

(1)在AndroidManifest.xml文件中声明:要想在别的App上成功调用起App,必须设置Intent过滤器

<data android:scheme="Http" android:port="8080" android:path="/goodsDetails"/>

<catagory android:name="android.intent.catagory.DEFAULT"/>

<action android:name="android.intent.action.VIEW"/>

<catagory android:name="android.intent.catagory.BrowScale"/>

(2)获取Scheme跳转参数:

Uri uri=getIntent().getData();

(3)网页上:

<a herf="Http://good:8080/goodsDetails?goodsId=10002"/>


转自:https://blog.csdn.net/pgg_cold/article/details/79382130

今天正式开始Android篇的面试题,先从最熟悉的总结吧。

Activity我相信只要学过Android开发的接触最多的就是这个组件了吧,Android四大组件的头牌,得好好说道说道。

提到Activity,涉及的东西真的还挺多,什么生命周期啊,启动模式啊,进程优先级啊,别着急,一个一个来。

1.概念:

Android开发中提供给用户进行滑动触摸等操作的界面。

2.Activity四种状态:

(1)running:正在活动状态

(2)paused:暂停状态,失去与用户交互的能力

(3)stop:停止状态,被另一个Activity完全覆盖

(4)killed:销毁状态,已被回收

3.生命周期:

(1)正常状态:

(A)Activity启动:onCreated()->onStarted()->onResume();先后经历,被创建->正在启动,此时可见但不可访问->启动成功,此时可见并且可以访问

(B)点击Home键回到主界面(Activity不可见):onPause()->onStop();

(C)再次点击图标回到Activity:onReStart()->onStart()->onResume();先后经历,正在重新启动Activity->正在启动->启动成功

(D)退出当前Activity:onPause()->onStop()->onDestroy();

问题一个:旧的Activity的onPause()和新的Activity的onResume()谁先被执行?

答:onPause()先执行,在新的Activity启动之前,栈顶的Activity需要先onPause()之后,新的Activity才能启动;

(2)非正常情况:

(A)由于资源相关的系统配置发生改变时导致Activity被杀死并重新创建(如横竖屏的切换)

先调用onSavedInstanceState()保存数据->重新创建onCreate()->调用onRestoreInstanceState()恢复数据

tips1:恢复哪些数据呢?

视图结构,文本框中输入的数据,ListView的滚动位置等

tips2:保存和恢复View层次结构的工作流程:

首先会调用onSaveInstanceState()保存数据,然后Activity会委托Window去保存数据,window再委托它上面的顶层容器(ViewGroup),一般来说是DecorView,最后由DecorView会通知它的子元素去保存数据。

(B)资源内存不足导致低优先级的Activity被杀死

这种情况和情况A的数据保存与恢复是一样的,但这里想说说进程的优先级;

总的来说,Android里大致分为五大进程,优先级从高到低

(a)前台进程:正在与用户交互的进程,或者是与前台Activity绑定的Service;

(b)可见进程:不可交互但可见的进程;

(c)服务进程:后台不可见正在运行的进程

(d)后台进程:已经被暂停的Activity

(e)空进程:优先级最低

tips3:防止Activity在屏幕旋转是重新创建,给ConfigChanges添加orientation;

4.Android任务栈:(Activity的启动模式)

(1)Standard:标准启动模式,每次启动一个Activity都会重新创建一个新的实例

(2)SingleTop:栈顶复用模式,如果新的Activity已经位于任务栈内的栈顶,那么此Activity不会被重新创建,调用onNewIntent()方法

(3)SingleTask:栈内复用模式,只要Activity在一个栈内存在,那么多次启动此Activity都不会重新创建实例

(4)SingleInstance:单实例模式,加强版的SingleTask,具有此种模式的Activity只能单独位于一个任务栈中;

最后一波福利~:灰常有用的tips,URLSchema(页面内跳转协议)

1.概念:是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的Schema协议,可以非常方便的跳转App中的各个页面;

那么什么是Scheme协议呢?

URL Schema协议格式:

先来个完整的URL Schema协议格式: 

xl://goods:8888/goodsDetail?goodsId=10011002 
通过上面的路径 Schema、Host、port、path、query全部包含,基本上平时使用路径就是这样子的。

 •xl代表该Schema 协议名称
 •goods代表Schema作用于哪个地址域
 •goodsDetail代表Schema指定的页面
 •goodsId代表传递的参数
 •8888代表该路径的端口号

2.应用场景:

(1)服务器下发跳转路径,客户端根据服务器下发的路径跳转到相应页面;

(2)H5页面点击锚点,根据锚点具体跳转路径,App跳转到具体的页面;

(3)App端收到服务器端下发的PUSH通知栏消息,根据消息跳转到相应页面;

3.应用实例:

(1)在AndroidManifest.xml文件中声明:要想在别的App上成功调用起App,必须设置Intent过滤器

<data android:scheme="Http" android:port="8080" android:path="/goodsDetails"/>

<catagory android:name="android.intent.catagory.DEFAULT"/>

<action android:name="android.intent.action.VIEW"/>

<catagory android:name="android.intent.catagory.BrowScale"/>

(2)获取Scheme跳转参数:

Uri uri=getIntent().getData();

(3)网页上:

<a herf="Http://good:8080/goodsDetails?goodsId=10002"/>


猜你喜欢

转载自blog.csdn.net/u013651026/article/details/86743135
今日推荐