1. 注册流程 final LifecycleRegistry mFragmentLifecycleRegistry = new LifecycleRegistry(this); @Override public void addObserver(@NonNull LifecycleObserver observer) { // 可以让刚注册的可以获取先前的回调,在下面的while循环 State initialState = mState == DESTROYED ? DESTROYED : …
1. 占用大小 scaledWidth = int( 原图宽度 * (设备的 dpi / 目录对应的 dpi ) + 0.5) scaledHeight = int( 原图高度 * (设备的 dpi / 目录对应的 dpi ) + 0.5) scaledWidth * scaledHeight * 4(具体Bitmap 的格式大小,如:ARGB_8888是4字节) 0.5是为了精度,一般直接记为 原图高度 * (设备的 dpi / 目录对应的 dpi * 原图高度 * (设备的 dpi / 目录…
1. Handler Handler - ViewRootImpl -> requestLayout -> scheduleTraversals -> 使用到了同步屏障, 绘制时会执行TraversalRunnable任务线程,其中会移除同步屏障 ThreadLocal适合用于在不同线程作用域的数据备份 ThreadLocal机制通过在每个线程维护一个ThreadLocalMap,其key为ThreadLocal,value为ThreadLocal对应的泛型对象,这样每个ThreadLocal就…
1. 整体框架 1.1 底层接口 open,mmap,ioctl open:打开设备节点 mmap:分配共享区域 ioctl:对共享内存读写数据,并且是一些binder调用的事务管理。 1.2 中层接口 ProcessState和IPCThreadState ProcessState是一个singleton类,每个进程只有一个对象,这个对象负责打开Binder驱动,开辟一个共享空间,建立线程池,让其进程里面的所有线程都能通过Binder通信 每个线程都有一个IPCThreadState实例登记在…
1. AIDL简单使用 AIDL服务端 AIDL客户端 2. in、out、inout的区别 in 表示客户端传入的参数 (如:book), 服务端可以完整接受到改对象,但对其修改不会会同步到 客户端传入的参数对象 out 表示客户端传入的参数 (如:book), 服务端接受到的对象为空对象,并且服务端重新new修改改对象,并不会影响客户端传入的参数对象 inout表示客户端传入的参数 (如:book), 服务端可以完整接受到改对象,并且对其修改会同步到 客户端传入的参数对象 // BookMa…
1. 普通Activity创建 - activity向Instrumentation请求创建 Instrumentation通过AMS在本地进程的IBinder接口,访问AMS,这里采用的跨进程技术是AIDL。 然后AMS进程一系列的工作,如判断该activity是否存在,启动模式是什么,有没有进行注册等等。 通过ClientLifeCycleManager,利用本地进程在系统服务进程的IBinder接口直接访问本地ActivityThread。 ApplicationThread是Activi…
Activity拥有自己PhoneWindow以及WindowManager,同时它的PhoneWindow拥有token;而Application并没有自己的PhoneWindow,他返回的WindowManager是应用服务windowManager,并没有赋值token的过程 token是个Binder对象,他持有ActivityRecord的弱引用,这样可以访问到activity的所有信息 Activity的启动流程 每个token创建后,会在后续发送到WMS ,WMS对token进行缓…
1. Context Context是应用程序与系统之间沟通的桥梁,是应用程序访问系统资源的接口 Context文章源链接 使用到了装饰者模式,把封装操作实现在ContextImpl中。 ContextProvider使用的是Application的context,Broadcast使用的是activity的context Activity的getBaseContext,即ContextImpl 真正的Context接口的逻辑实现类 使用Application启动的Activity必须指定tas…
Activity 在 attach 阶段创建了 PhoneWindow,并将 AppToken 存储到 PhoneWindow 中,然后通过 createLocalWindowManager 创建了一个本地的 WindowManager,该实例是 WindowManagerImpl,构造传入的 parentWindow 为 PhoneWindow。在 onResume 阶段时,从 PhoneWindow 中获取 WindowManager 来 addView。 Dialog 有自己的 Phone…
1. Flow替换Sequence(SequenceScope类上使用了RestrictsSuspension注解) 2. 冷数据流:flow (消费者消费时才会生产数据) 实际是通过SafeFlow类创建的Flow对象。SafeFlow继承自AbstractFlow。而AbstractFlow同时继承了Flow和 CancellableFlow两个接口。这也就意味着我们创建的冷数据流Flow是可以取消的。 - 取消:直接取消对应所在的协程即可 为了保证上下文一致性,禁止withContext进…