本文最后更新于 878 天前,其中的信息可能已经有所发展或是发生改变。
1. Handler
Handler
– ViewRootImpl -> requestLayout -> scheduleTraversals -> 使用到了同步屏障, 绘制时会执行TraversalRunnable任务线程,其中会移除同步屏障
- ThreadLocal适合用于在不同线程作用域的数据备份
- ThreadLocal机制通过在每个线程维护一个ThreadLocalMap,其key为ThreadLocal,value为ThreadLocal对应的泛型对象,这样每个ThreadLocal就可以作为key将不同的value存储在不同Thread的Map中,当获取数据的时候,同个ThreadLocal就可以在不同线程的Map中得到不同的数据
- ThreadLocalMap类似于一个改版的HashMap,内部也是使用数组和Hash算法来存储数据,使得存储和读取的速度非常快。
- 同时使用ThreadLocal需要注意内存泄露问题,当ThreadLocal不再使用的时候,需要通过remove方法把value移除。
-
Android程序的入口在ActivityThread的main方法,创建了主线程的Looper
public void dispatchMessage(@NonNull Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
private static void handleCallback(Message message) {
message.callback.run();
}