一 |
选择题 15道 |
1 |
集合类是否线程安全 Vector 线程安全 ArrayList 非线程安全 LinkedList 非线程安全 Hashtable 线程安全 HashMap 非线程安全 TreeMap 非线程安全
|
2 |
Tween动画 alpha 渐变 scale 大小 translate 移动 rotate 旋转
|
3 |
Activity各个什么周期 获取焦点
onCreate Activity正在被创建 方法中做一些初始化的工作 加载界面布局 初始化数据等
onRestart Activity重新启动
onStart Activity正在启动 已经可见 但是无法和用户交互
onResume Activity可见 出现在前台并开始活动
onPause Activity正在停止
onStop Activity即将停止 可做稍微重量级的回收工作
onDestroy Activity即将被销毁 可做回收工作和最终的资源释放
|
4 |
自定义View过程
onMeasure()、onLayout()、onDraw() 测量 布局 绘制
|
5 |
ANR时间
输入事件 5秒 BroadcastReceiver onReceive() 10秒 Service 各个什么周期 20秒
|
6 |
android:layout_weight 使用范围
Linearlayout
|
二 |
简答题 4道 |
1 |
1 Handler机制 异步消息处理线程启动后会进入一个无限的循环体中 每循环一次 从其内部的消息队
列中取出一个消息 然后回调相应的消息处理函数 执行完成一个消息后则继续循环 若消息队列为空 线程阻塞等待 代码执行流程 1、首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个
MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以
MessageQueue在一个线程中只会存在一个。 2、Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读
取消息,然后回调msg.target.dispatchMessage(msg)方法。 3、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实
例中的MessageQueue想关联。 4、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入
MessageQueue中。 5、在构造Handler实例时,我们会重写handleMessage方法,也就是
msg.target.dispatchMessage(msg)最终调用的方法。
Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程
之间交换数据 Message 的what 字段,除此之外还可以使用arg1 和arg2 字段来携带一些整型
数据, 使用obj 字段携带一个Object 对象 Handler 处理者 主要是用于发送和处理消息的 发送消息一般是使用Handler 的
sendMessage()方法, 而发出的消息经过一系列地辗转处理后,最终会传递到Handler 的
handleMessage()方法中 MessageQueue 消息队列 存放所有通过Handler 发送的消息。这部分消息会一直存在于消息队
列中,等待被处理。 每个线程中只会有一个MessageQueue对象 Looper 每个线程中的MessageQueue 的管家,调用Looper 的loop()方法后,就会 进入到一个无限循环当中,然后每当发现MessageQueue 中存在一条消息,就会
将它取 出,并传递到Handler 的handleMessage()方法中。每个线程中也只会有一个
Looper 对象
|
2 |
Binder机制 Binder是Android系统中的一种IPC进程间通信结构。 Binder的整个设计是C/S结构,客户端进程通过获取服务端进程的代理,并通过
向这个代理接口方法中读写数据来完成进程间的数据通信。 Android之所以选择Binder,我觉得有2个方面的原因。 1是安全,每个进程都会被Android系统分配UID和PID,不像传统的在数据里加入
UID,这就让那些恶意进程无法直接和其他进程通信,进程间通信的安全性得到提升
。 2是高效,像Socket之类的IPC每次数据拷贝都需要2次,而Binder只要1次,在手
机这种资源紧张的情况下很重要。
|
3 |
内存泄漏的定义和常见原因 进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引
用到gc roots导致无法被GC回收。无用的对象占据着内存空间,使得实际可使用内存
变小,形象地说法就是内存泄漏了。 1 静态变量导致 2 单例模式导致 3 属性动画导致
|
4 |
ListView的优化 解决图片错乱 1 convertView的使用,主要优化加载布局问题 2 内部类ViewHolder的使用 主要优化getView方法中每次回调用findviewByID()方法
来获取一次控件的代码。 3 图像加载框架的使用
|