android笔试题二

1、android系统架构:

Linux内核——标准库——Framework层——应用层

Linux层包涵:Android系统的主导服务,硬件驱动,进度管理,系统安全等等

(现在又加了一层变成了:Linux内核——硬件抽象层——标准库——Framework层——应用层)

 

2、UI界面框架图:

图片 1

3、View的测量形式:EXACTLY,AT_MOST,UNSPECIFIED。

4、自定义View与ViewGroup的时候应该专注哪些?

自定义ViewGroup的时候理应专重视写onLayout来支配子类显示的职位。

要是须求辅助wrap_content还要重写onMeasure()。

自定义View的时候,假如急需协理wrap_content,需求重写onMeasure().

5、自定义view的种类:

(1)、对已有的组件举行举办

(2)、通过结合来兑现新的控件

(3)、重写View来落到实处全新的控件

 

 6、完成滑动的法门:

(1)、通过layout方法。

(2)、通过LayoutParam来改变一个view的岗位(必须有一个父布局才可以获得到零部件的LayoutParam)。

(3)、scrollTo,scrollBy方法。(移动的是组件里面的情节,dx和dy借使是负数的话,那么内容往正方向移动,正数则往负方向移动)。

(4)、Scroller。

(5)、属性动画。

(6)、ViewDragHelper

(7)、offsetLeftAndRight()同时对左和右进行偏移。

             offsetTopAndBottom()同时对上和下开展偏移。

7、独立像素dp与px的折算:

android系统应用mdpi即密度值为160的显示器作为正式,在这些屏幕上,1px=1pd,各类分辨率直接的折算比例为:

ldpi:mdpi:hdpi:xhdip:xxhdpi=3:4:6:8:12

 

8、SurfaceView与View的区别:

(1)、View首要用于主动立异的动静,而SurfaceView主要用以被动更新的气象,例如频仍地刷新。

(2)、View是在主线程中举办刷新的,而SurfaceView是经过一个子线程来刷新页面的。

(3)、View在绘图的时候从不选拔双缓冲机制,而SurfaceView在底部已毕机制中就已经落成了双缓冲机制。

9、android的莱芜体制:

(1)、第一道防线:代码安全部制——代码混淆proguard。

(2)、第二道防线:应用接入权限控制——AndroidMainifest文件权限阐明、权限检查体制。

(3)、第三道防线:应用签名机制——数字证书(Android系统不会设置没有签字的APP)。

(4)、第四道防线:Linux内核层安全机制——Uid访问权限控制

(5)、第五道防线:Android虚拟机沙箱机制——沙箱隔离

 

10、性能优化相关的工具:

(1)、Android Link:有助于发现代码中潜藏的一些题材,比如布局嵌套太多等等。

(2)、Memory monitor:这一个是android studio自带的内存监视工具,它能够很好地扶持大家进行内存实时分析。

(3)、TraceView:优化APP性能。

(4)、MAT工具分析APP内存状态。

 

11、Serializable与Parcelable的区别:

Serializable是java中的连串化接口,使用简易,不过付出大,种类化与反体系化进程需求多量的I/O操作。

Parcelable是android中的连串化情势,尤其适用于Android平台上,然而使用起来有些麻烦一点,可是效用高,这是android推荐的种类化形式,因而我们要首选Parcelable。

Parcelable主要用来内存种类化上,通过将对象体系化到存储设备中,或者讲对象种类化后通过网络传输也是足以的,不过经过比较复杂,由此那两种景况下将已利用Serializable。

 

12、多进程会造成什么问题:

(1)、静态成员与单例形式完全失效。

(2)、同步机制完全失效。

(3)、SharedPrefrences可看重性下落

(4)、Application很多次创办

 

13、IPC的办法有啥样,差别是怎样:

名称 优点 缺点 适用场景
Bundle 简单易用 只能够传输Bundle支持的数据 四大组件之间的进程间通讯
文件共享 简单易用 不适合高并发场景,并且无法做到进程间的即时通信 无并发访问情形,简单交换的数据实时性不高的场景
AIDL 功能强大,支持一对多并发通信 使用稍微复杂,需要处理好线程同步 一对多通信且有RPC需求
Messenger

功能一般,支持一对多串行通信

支持实时通信

不能很高的处理高并发情形,不支持RPC,数据通过

Messenger进行传输,因此只能够传输Bundle支持

的数据类型

低并发的一对多即时通信,无RPC需求,或者无需返

回结果的RPC需求

ContentProvider

在数据源访问方面功能强大,支持一对多

并发数据共享,可通过Call方法拓展其他

操作

可以理解为受约束的AIDL,主要是提供数据源的

CRUD操作

一对多的进程间数据共享
Socket

功能强大,可以通过网络传输字节流,支

持一对多并发实时通信

实现细节稍微有点繁琐,不支持直接的RPC 网络数据交换

14、线程的两种情形:

(1)、新建:新创设了一个线程对象。

(2)、就绪:线程对象成立后,其余线程(比如 main 线程)调用了该目标的 start ()方法。本场面的线程位于可运行线程池中,等待被线程调度选中,获
取 cpu 的使用权 。

(3)、运行:可运行情况( runnable )的线程得到了 cpu 时间片( timeslice ) ,执行程序代码。

(4)、阻塞:

阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu
timeslice ,暂时为止运行。直到线程进入可运行( runnable )状态,才有
机会再一次得到 cpu timeslice 转到运行( running )状态。阻塞的处境分三种:

(一). 等待绿灯:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放
入等待队列( waitting queue )中。

(二). 同步阻塞:运行( running )的线程在取得对象的一块锁时,若该联合锁
被其他线程占用,则 JVM 会把该线程放入锁池( lock pool )中。

(三). 其余阻塞:
运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者暴发了 I / O 请求时, JVM 会把该线程置为阻塞状态。            当 sleep ()状态超时、 join ()等待线程终止或者逾期、或者 I / O 处理落成时,线程重新转入可运行( runnable )状态。

(5)、归西:线程 run ()、 main () 方法执行已毕,或者因不胜退出了 run ()方法,则该线程为止生命周期。身故的线程不可再一次复生。

相关文章