首页 > 代码库 > 广州酷狗计算机科技在线测评题 Android岗位

广州酷狗计算机科技在线测评题 Android岗位

选择题 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 图像加载框架的使用

广州酷狗计算机科技在线测评题 Android岗位