Android面试准备
面试题参考
- java 十道 高级面试题
- 2019初中级Android开发社招面试解答
- OPPO Android开发技术面总结
- Android大厂面试经验分享
- Android 技能图谱学习路线
- 2018年广州某些公司Android面试题(技术+总监+人事)
- Android 2018年面试经历总结
- Android开发面试经——常见面试官提问Android题
- 一个老Android的面试总结
- Android最新面试实战总结
- 18年底Android面经分享(已获头条、顺丰、OPPO等大厂offer)
- 互联网寒冬下,一个 Android 程序员的面试心得
- Android APP性能优化的四个方面最全总结
- Android 开发社招面经,历时两月斩获BAT+头条四个公司 Offer
- 2018年年底Android悲催的面试之路
- 2018下半年Android面试历程
- Android面试看完这篇文章就可以了
- 看完这篇 Android ANR 分析,就可以和面试官装逼了!
- 最接地气的Android面试总结心得
- Android大厂面试经验分享
技术单点突破
Handler
1、一个线程能否创建多个Handler,Handler跟Looper之间的对应关系
以一个 Thread 为基准,他们的数量关系是 : Thread(1) 、Looper(1)、MessageQueue(1)、Handler(N)
2、为何一个线程只有(允许有)一个Looper对象?
Looper 是通过 Looper.prepare() 创建, 最终是由 ThreadLocal<Looper> sThreadLocal 持有,而 ThreadLocal 保证每一个线程只存在一个Looper对象,ThreadLocal采用 HashMap ,key = CurrentThread (自己理解,不准确,有需要自行Google)
3、HandlerThread是什么 & 原理 & 使用场景?
HandlerThread 继承自Thread ,扩转Thread 便于Handler 使用, 使用场景:在子线程中执行耗时的、可能有多个任务的操作
* 正常在子线程中创建 Handler 的方式
* HandlerThread.run() 方法
对比后,发现 HandlerThread 是针对于 Handler 生成的 Thread 模板。
4、在Activtiy中创建一个Thread和在一个Service中创建一个Thread的区别?
在Activity中被创建:该Thread的就是为这个Activity服务的,完成这个特定的Activity交代的任务,主动通知该Activity一些消息和事件,Activity销毁后,该Thread也没有存活的意义了。
在Service中被创建:这是保证最长生命周期的Thread的唯一方式,只要整个Service不退出,Thread就可以一直在后台执行,一般在Service的onCreate()中创建,在onDestroy()中销毁。所以,在Service中创建的Thread,适合长期执行一些独立于APP的后台任务,比较常见的就是:在Service中保持与服务器端的长连接。