博观而约取,厚积而薄发。这篇文章主要讲述广州酷狗计算机科技在线测评题 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 | 【广州酷狗计算机科技在线测评题 Android岗位】ListView的优化 解决图片错乱 1 convertView的使用,主要优化加载布局问题 2 内部类ViewHolder的使用 主要优化getView方法中每次回调用findviewByID()方法 来获取一次控件的代码。 3 图像加载框架的使用 |
推荐阅读
- android studio中使用 aar 和gradle 的配置
- 安卓的显示单位dpdippxsp
- Android开发之startService和onBinderService混合开发音乐播放器
- Android性能测试工具Emmagee
- android 命令行签名apk文件
- Android Studio 2.3 正式版新功能,你不来看看(!)
- Android性能优化:内存优化
- Android自定义UI控件(简单方便版,但不灵活)
- android studio- Gradle "xxx" project refresh failed