Android 进阶之路

Android 面试题(一)

2018-09-27  本文已影响16人  雪纳瑞的哈士奇

Android 四大组件是那些 各自有什么作用和特点

1.Activity(活动):Activity 是 Android 程序与用户交互的窗口 是 Android 构造中最基本的一种 他需要保持各个界面的状态 做很多持久化的事情 妥善管理生命周期以及一些逻辑跳转
2.Service(服务):后台服务于 Activity 封装有一个完整的功能逻辑实现 接受上层指令 完成相关事务 定义好需要接受的 intent 提供同步和异步接口
3.ContentProvider(内容提供者):是 Android 提供的第三方应用数据的访问方案,可以派生 ContentProvider 类,对外提供数据,可以想数据库一样进行选择排序,屏蔽内部数据的储存细节,向外提供同意的接口类型,大大简化上层应用,对数据整合提供了更方便的途径.
4.BroadCast Receiver(广播接收器):接受一种或者多种的 Intent 作出发时间,接受相关消息,做一些简单的处理,转换成一条 notification,统一了 Android 的事件广播模型(如接收系统通知,向通知栏发送消息).

Activity 的生命周期函数都有哪些?点击 Home,Back 键等操作时,生命周期函数如何迁移

onCreate(),创建 act 实例的时候调用.通常进行一些数据的初始化,比如获取控件,申请数组或者集合的内存,变量赋值
onRestart(),act 停留在 onStop 但是没有 onDestory
onStart(),该方法在 onCreate 或者 onRestart 之后调用,调用之后 act 进入可视生命周期
onResume(),onStart 之后调用,调用该方法后 act 进入活动状态,可以和用户进行交互,比如用户的输入,点击,触摸等操作
onPasue(),在 onResume 之后调用,调用该方法,此 act 就不能继续和和用户产生交互,用户自定义的一些数据可以在此方法中保存
onStop(),onPasue 之后调用,一旦掉好用 onStop,act就退出了可视状态,但是 act 实例并没有被销毁
onDestory(),此方法实在销毁 act 实例的时候调用,一单表明该 act 实例的生命周期就结束了,通常会在此方法做一些释放资源的操作,比如将引用变量值置为 null

Activity 的四种加载模式分别是什么?各自有什么特点

standard:每一次启动改 act 时,会重建一个新的该 act 实例
singleTop:每一次启动该 act 时,检查栈顶是否存在该 act 的实例

存在

则直接重用该 act 实例

不存在

则需要重新创建该 act 实例

singleTask:每次启动该 act 实例时,需要在栈中去检查是否存在该 act 的实例

存在

在栈顶:直接重复使用该 act 的实例
不在栈顶:首先吧其上的 act 实例移除掉,使该 act 回到栈顶去,然后再复用该 act 的实例

不存在

创建一个新的 act 的实例

singleInstance:看进程中是否有该 act 实例

存在

直接从该独享栈中取出该 act 实例复用

不存在

新建一个栈然后新建一个该 act 的实例 放入到该栈中

注意
如果把程序入口 MainAct 的 act 设置为 singleInstance 时,通过该 act 启动了别的 act(SecondAct),再由其他 act(SecondAct)启动 ThirdAct,在 ThirdAct 启动 MainAct,由 MainAct 再去启动 SecondAct 时,不会产生第四个实例,只是吧 MainAct 所在的栈切换到 SecondAct 所在的栈,把栈顶的实例展示出来

Activity 意外退出时,如何进行数据保存和恢复

开发者提前可以复写 onSaveInstanceState 方法,创建一个 Bundle 类型的参数,把数据储存在这个 Bundle 对象中,这样即使 Activity 意外退出,Activity 被系统摧毁,当重新启动这个 Activity 而调用 onCreate 方法时,上述的 Bundle 对象会作为参数传递给 onCreate 方法,开发者可以从 Bundle 中取出保存的数据,利用这些数据将 Activity 恢复到被摧毁之间的状态

Intent 是什么,有什么用处

Intent(意图):作用是调用某个组件区做一个事情,它技能充当一个桥梁,也可以传递数据

Intent 如何传递数据?Bundle 是什么,有什么用?

Intent 传值,通过 Intent 的类提供的 setData 和 putExtra 方法传递
Bundle:连个 Activity 之间的通讯可以通过 Bundle 类来实现,把要传递的数据通过 key-value 的形式加入数据,另外一个 activity 里面取出数据时,用 key 对应的 value

onCreate(Bundle savedInstanceState)中 savedInstanceState有什么用,什么情况下为 null?

savedInstanceState是用来保存实例状态的,当 Activity 意外退出的时候保存需要的数据,开发者可以通过再次进入 onCreate 中savedInstanceState取出保存的数据,默认不写的时候为 null

如何实现使用 Intent 来传递自定义对象

序列化要传递的自定义对象,再通过 Bundle 来传值

序列化

将对象转换为可保持或传输的格式的过程,与序列化相对的是反序列化,他将流转换为对象,通过序列化和反序列化实现储存和数据传输
序列化的方式有两种,Serializable 和 Parcelable 接口可以完成序列化的过程,两种方法都很常见,但是两者方式并不想同
Serializable 接口是 JAVA 提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作,时候用 Serializable 来实现对对象的序列化相当简单,只需要在类的生命中指定一个类似相面的标识即可自动实现默认序列化过程
-------我是分割线-----------
Parcelable接口是Android SDK提供的一种专门用于Android应用中对象的序列化和反序列化的方式,相比于Seriablizable具有更好的性能。实现Parcelable接口的对象就可以实现序列化并可以通过Intent和Binder传递。

上一篇下一篇

猜你喜欢

热点阅读