1anr 原理
新开一个线程,发送 delay 消息anr msg,
mAm.mHandler.sendMessageAtTime(msg,
proc.execServicesFg ? (now+SERVICE_TIMEOUT) : (now+ SERVICE_BACKGROUND_TIMEOUT));
}
//拆除炸弹引线[见小节2.2.2]
ActivityManagerNative.getDefault().serviceDoneExecuting(
data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0);
2.handler 机制,
looper 做了哪些事情, 绑 thread,thread 私有变量 threadlocalmap 等
idleHandler 什么时候处理,
looper .loop 其实内部本质是用 msgQ里的 next方法
msgQ为什么 next 死循环不会卡死线程,因为nativePollOnce,
messagequeue .enqueueMsg,通过 msg.when 来排。
messagePrinter 打印时机
handlerThread如何退出-quit
异步 msg,同步 msg 区别:
唯一的区别就是异步消息没有target,也就是没有Handler对象,MessageQueue在执行next方法时就会走到if (msg != null && msg.target == null)中,此时它会忽略其间所有的同步消息,直到找到一个异步消息并开始执行,这个做法称之为同步屏障。
同步屏障有啥用
scheduleTraversals() {
if (!mTraversalScheduled) {
mTraversalScheduled = true;
mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
syncbarrrier消息能让异步 msg 立刻执行消费。
MessageQueue#postSyncBarrier
这个消息一般是给 scheduleTraversals去绘制的
blockcanary 原理Printer,在 looper.loop 里,在每个 msg.target.dispatchmsg 前后打印
自己做监控 how。
3.view 流畅度
fps 指标,丢帧,vsync信号,choregrapher.onFrameCallback
界面流畅度优化
双缓冲
如何算丢帧
4.内存
leakcanary 原理
5.触摸事件
button 按下,移动到外部 viewGroup抬起,触发的事件有哪些
action down.up/move cancel
6.工作中编译优化做了哪些事
--scan 定位
7.数据结构
arraylist怎么保证其线程安全。
copyonwrite 原理,线程安全?
cas
如何线程安全。
单例dcl里 volatile 的作用。 静态内部类,枚举算懒汉还是饿汉,为啥。
类加载时机。
类加载机制-双亲委派。
8.sp 的线程安全
卡死。为啥,锁的是什么。edit,apply 区别。
二轮
项目,
app启动流程,
glide怎么管理图片生命,
contentProvider oncreate时机,
LeakCanary原理,分析引用链
idleHandler,
view 点击sleep为啥不会anr ,
jit aot区别,
图片内存计算,
glide图片缓存机制,
单元测试覆盖率jacoco方案及其原理
ontrimMem OnlowMemory区别,
https://www.cnblogs.com/ganchuanpu/p/7455793.html
我自己的view优化方案
recycledview卡顿优化,关键函数
livedata
jetpack
https://zhuanlan.zhihu.com/p/334350927