前言
使用说明:在某个主题下可点击的知识点链接可以访问对应的知识点,代码链接都指向同一个gitee开源仓库。Tag表示对应知识点在代码仓库中的标签。
知识点相关源码:代码。
一.Activity常见的问题知识点
1. Activity的生命周期(version_activity_1_2)
2. Activity A启动另一个Activity B会调用哪些方法?(version_activity_1_2)
3. 如果B是透明主题的又或则是DialogActivity呢?(version_activity_3)
4. 屏幕横竖屏旋转对Activity的生命周期的影响(version_activity_4)
5. onSaveInstanceState(),onRestoreInstanceState的调用时机
6.onStart和onRume/onPause和onStop的区别
9. Activity之间传递数据的方式intent是否有大小限制,如果传递数据量大 ,有哪些方案
12.ANR的四种场景
13. onCreate和onRestoreInstance方法中恢复数据时的区别
15. Activity的任务栈是什么
17. Activity的数据是怎么保存的,进程被kill后,保存的数据怎么恢复的
18. View的绘制是在Activity哪个生命周期中被回调的。(dev_ondraw)
onResume()之后。
相关内容
一.二 、广播常见的问题
2.静态注册和动态广播有什么区别,注册方式、缺点和优点、生命周期对比。
3.默认广播和有序广播对比。
二、Handler常见面试题
1. Handler的实现原理
2.子线程中能不能直接new一个Handler,为什么主线程可以?主线程的Looper第一次调用loop方法,什么时候,哪个类?
3.Handler导致的内存泄露原理及其解决方案(version_handler_3)
4. Android中为什么主线程不会因为Looper.loop()里的死循环卡死
5. 一个线程可以有几个Handler,几个Looper,几个MessageQueue对象(1)
8. Handler有哪些发送消息的方法&区别
9. handler postDealy后消息队列有什么变化,假设先postDelay 10s,再postDelay1s,怎么处理这两条消息
11. Message中异步消息和同步消息有什么区别,消息屏障(version_handler_14)
12. Handler怎么做到一个线程对应一个Looper,如何保证只有一个MessageQueue ThreadLocal在Handler机制中的作用
13. HandlerThread是什么 & 好处 & 原理 & 使用场景
15. 消息屏障,同步屏障
16. 子线程能不能更新UI
19. MessageQueue#next在没有消息的时候会阻塞,如何恢复?
20. Handler消息机制中,一个Looper是如何区分多个Handler的
21.当Activity有多个Handler的时候,怎样区分当前消息由哪个Handler处理
22. 处理Message的时候怎么知道是哪个callback处理的
27. MessageQueue的enqueueMessage()方法如何进行线程同步的
29. 子线程是否可以用MainLooper去创建Handler,Looper和Handler是否一定处于一个线程
总结:
1.每个线程都可以多个Handler,1个Looper,1个MessagQueue,但是线程之间的Looper、MessageQueue互不相关,线程之间的Handler可以互相通信。
2.子线程中是否可以不调用Looper.prepare()就更新UI呢?可以的 ,前提要满足两个条件:(1)该UI view是在该子线程中创建的;(2)该view中不包含创建Handler的代码,因为Handler和一个Looper绑定,创建Handler时找不到Looper就会报错。
3.子线程中是否可以创建view,可以的,但是后续更新该UI都要在该线程中完成,否则会报错:应该在创建该view的原始线程中更新UI。 (version_childThread_create_UI)
三、Binder常见面试题
6. Binder Driver如何在内核空间中做到一次拷贝的?
9. 什么是AIDL (version_aidl_basic),基本例子
10. AIDL支持哪些数据类型
11. AIDL的关键类,方法和工作流程
12. 如何优化多模块都使用AIDL的情况 (version_binder_optimize_more_aidl)
13. 使用Binder传输数据的最大限制是多少,被占满后会导致什么问题
14. Binder驱动加载过程中有内些重要的步骤
18. 什么是序列化?Serializable接口和Parcelable接口的区别?为何推荐使用后者
1,3,8, 12,18
19.Binder的定向制导,如何找到目标Binder,唤起进程或者线程
20. Binder中的红黑树,为什么会有两棵binder_ref红黑树
21. 传输Bitmap过大,就会崩溃的原因,Activity之间传输BitMap
22.Binder线程、Binder主线程、Client请求线程的概念与区别
23.Client是同步而Server是异步到底说的什么
24.Android APP进程天生支持Binder通信的原理是什么
25. Android APP有多少Binder线程,是固定的么
26. Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程)
27. Binder协议中BC与BR的区别
28. Binder在传输数据的时候是如何层层封装的--不同层次使用的数据结构(命令的封装)
29. Binder驱动传递数据的释放(释放时机)
30. ServiceManager addService的限制(并非服务都能使用ServiceManager的addService)
31. Parcel readStrongBinder与writeStrongBinder的原理
32. Java层Binder实体与与BinderProxy是如何实例化及使用的,与Native层的关系是怎样的
33. 同一个线程的请求必定是顺序执行,即使是异步请求(oneway)
34. Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程)
四、WMS
2.WMS是如何管理Window的
3.IWindowSession是什么,WindowSession的创建过程是怎样的
5.WindowState是什么
7.Dialog的Context只能是Activity的Content,不能是Application的Context
五、View
1. View绘制流程
2. MeasureSpec是什么
3. 子View创建Measurespec创建规则是什么
4. 自定义Viewwarp_content不起作用的原因
5. 在Activity中获取某个View的宽高有几种方法
6.为什么onCreate获取不到View的宽高
7.View#post与Handler#post的区别
8.Android绘制和屏幕刷新机制原理
9.Choreography原理
10.什么是双缓冲
11.为什么是用SurfaceView
12.什么是SurfaceView
13.View和SurfaceView的区别
14.SurfaceView为什么可以直接子线程绘制
15.getWidth()方法和getMeasureWidth()区别
16.invalidate()和postInvalidate()的区别
17.RequestLayout,onlayout,onDraw,DrawChild区别于联系
18.LinearLayout/FrameLayout/Relativilayout哪个效率高
18.LinearLayout的绘制流程
19.自定义View的流程和注意事项
20.自定义View如何考虑机型适配
21.自定义控件优化方案
21.invalidate怎么局部刷新
22.View加载流程(setContentView)
六、Java常见的面试题
4.深拷贝和浅拷贝
5.java的四种引用(强引用、弱引用、软引用、弱引用),实例和讲解
6.JVM模型概述
8.JVM垃圾回收的几种算法实现
9.JVM是如何知道需要垃圾回收的?
10.引用型计算算法和可达性分析算法的具体思路、优缺点。
11.常见的垃圾回收算法有哪几种,具体思路和优缺点。
12.JVM中不能自动垃圾回收的几种场景?(容易造成内存泄露的情况)
13.
七、EvenBus
1. EvenBus总体介绍
八、常见的Android设计模式
2.什么是观察者模式
九、多线程
1.线程和线程池
3.锁有哪几种类型、区别
4.大规模并发加锁处理场景
7.Synchronized的底层实现原理
十、计算机网络基础知识
3.视频传输使用的什么协议?
4.电话通信使用的什么协议?
5.网络上播放视频和下载视频发生了什么?
6.tcp和udp的区别?
十一、ANR(Application Not Response)
(yilink)
2.4种ANR场景?
3.你是如何在项目中处理ANR场景的?
十二、动画
1.动画有哪几种?
2.属性动画和补间动画的区别?
3.属性动画的底层实现原理是什么?代码层面?