面试常问的问题解决

Android 中常问的一些问题汇总

1.Activity的启动模式和一个app 的启动过程、activity的状态保存

   1.activity的启动过程概要
用户在Launcher程序里点击应用图标时,会通过Binder通知ActivityManagerService启动应用的入口Activity,ActivityManagerService发现这个应用还未启动,则会通知Zygote进程孵化出应用进程,然后在这个dalvik应用进程里执行ActivityThread的main方法。应用进程接下来通知ActivityManagerService应用进程已启动,activityThread通过binder 将application thread 类型的binder 对象传递带activityManagerService,ActivityManagerService也就保存应用进程的binder代理对象,这样ActivityManagerService可以通过这个代理对象控制应用进程,然后ActivityManagerService通知应用进程创建入口Activity的实例,并执行它的生命周期方法。
    2.启动模式
1) standard模式
standard模式的Activity可以有多个ActivityRecord加入不同的task,同一个task也可存在多个ActivityRecord,并且ActivityRecord还可相邻。

2) singleTop模式
singleTop模式与standard模式比较相似,singleTop模式的Activity可以有多个ActivityRecord加入不同的task,同一个task也可存在多个ActivityRecord,但是同一个task的ActivityRecord不可以相邻。

3) singleTask模式
singleTask模式和standard模式,singleTop模式区别很大,singleTask模式的Activity在整个回退栈只可以有一个ActivityRecord,也就是说它只能属于某一个task,不可在多个task里存在ActivityRecord。但是在这个task里可以有其它Activity的ActivityRecord。singleTask模式的Activity还有另一个特点:假设Activity A的启动模式是singleTask,A所在的task里,A并没有处于栈顶,此时若从别的Activity跳转至Activity A,那么A所在的task里位于A之上的所有ActivityRecord都会被清除掉。

4) singleInstance模式
该启动模式和singleTask类似,singleInstance模式的Activity在整个回退栈只可以有一个ActivityRecord,也就是说它只能属于某一个task,不可在多个task里存在ActivityRecord,并且它所在的task不可再有其它Activity的ActivityRecord,即使是同一个应用内的其它Activity,也不可有它们的AcvitityRecord。
注意
1) 从Launcher程序启动应用时,会先查找所有task,看是否有相关task,如果已有相关task,则会将相关task移动到回退栈的栈顶,然后显示栈顶Activity。查找相关task时,需看task是否和应用的入口Activity相关,入口Activity是指在AndroidManifest.xml里声明IntentFilter时,注明category为android.intent.category.LAUNCHER的Activity。如果入口Activity的启动模式为singleTask,不仅会将相关task移动到回退栈的栈顶,还会将该task里位于入口Activity之上的其它ActivityRecord全部清除掉
2) 通过最近应用程序,切换应用时,会直接将应用图标对应的task移动到回退栈的栈顶,这样即使task里有singleTask类型的ActivityRecord,在它之上的ActivityRecord也不会被清除

                3) 可以通过adb shell dumpsys activity activties查看系统task情况
3.activity的状态保存
activity中通过onSaveInstanceState()方法保存activity的状态,在onCreate() 或者onRestoreInstanceState()方法恢复状态
即调用如下代码
protected void onSaveInstanceState(Bundle outState){
outState.putString("data","example");
super.onSaveInstanceState();
}
          2.Json 、xml 的数据解析
         Json: JavaScript object Notation 轻量级数据转换 ,他是key value的键值对。
          xml:扩展标记语言,使用DOM 和SAX进行解析

              json 的优缺点
               优点:格式简单,易读写,占用带宽小,容易解析
              缺点:通用性不如xml

             xml的优缺点:
             优点:格式统一,扩展性好,易与其他系统进行交互,数据共享方便,用于复杂的数据结构解析
              缺点:文件庞大,格式复杂,解析费时

             3.网络通信协议,http 、tcp/ip 、socket通信协议
http协议:应用层协议,并且http协议是基于tcp连接的,主要解决的是如何包装协议的
tcp/ip协议:运输层协议,主要解决数据如何在网络中传输
udp协议:运输层协议,用户数据报协议,不可靠的协议,只负责把应用层的协议的数据传送到ip层的数据报,而不管数据是否到达。
socket就是一组调用接口(API),封装了做tcp/ip开发的网络接口,通过Socket,我们才能使用TCP/IP协议。
参考博客上有解释:http://blog.csdn.net/mr_dv_bkhm/article/details/51525476
http的get请求:它是一种检索URL 中标识资源的简单请求;
http的post请求:一种服务器接受客户端输出流中的数据来做出响应的请求。
http的响应码
200:正常返回
4xx:客户端错误
500-599:服务端错误
3xx:重定向,后面需追加内容
4、数据库
注意数据库的更新操作:onupgrade(SQliteDatebase db,int oldVersion,int newVersion){}
参考博客:http://blog.csdn.net/mr_dv_bkhm/article/details/51500589

5、项目开发过程中常用到的框架 volley 、okhttp、greendao数据库、Event-bus、xutils、universal-imageloader
主要介绍下EventBus
eventbus :发布|订阅事件总线
主要功能:
替代Intent handler broadcast 在fragment activity service 线程之间传递消息
优点:开销小,利于发送者和接受者的解耦
eventbus可实现的四个函数
onEvent();事件发布和接受在一个线程
onEvnetMainThread();接受在UI线程
onEventBackgroundThread();接受在子线程中执行,发布在子线程则接受也在子线程
onEventAsync();无论事件在哪里发布,都会创建子线程执行接受

事件的发布:通过Event.post()函数实现
事件的接收:通过上面4个订阅函数实现,接受的地方需要先进行注册,Eventbus.getDefault().register();
并在onDestory中注销: .......................unregister();
6、android studio 的使用gradle.build 的常用配置
参考:http://blog.csdn.net/mr_dv_bkhm/article/details/51496818

7、屏幕适配
参考:http://blog.csdn.net/mr_dv_bkhm/article/details/51281431

8、内存优化、性能优化
http://blog.csdn.net/mr_dv_bkhm/article/details/51540259

9、自定义view 的绘制流程
10、数据加密:MD5 加密、RAS加密
11、事件分发机制
12、android 多线程的处理:1.异步任务2.线程池3.Thread+handler+Message
http://blog.csdn.net/mr_dv_bkhm/article/details/51437967

13、设计模式
14、自动化测试和内存泄漏的检测方法
15、排序算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值