Android-Binder相关
1. 整体框架 1.1 底层接口 open,mmap,ioctl open:打开设备节点 mmap:分配共享区域 ioctl:对共享内存读写数据,并且是一些binder调用的事务管理。 1.2 中层接口 ProcessState和IPCThreadState ProcessState是一个singleton类,每个进程只有一个对象,这个对象负责打开…
Android-AIDL
1. AIDL简单使用 AIDL服务端 AIDL客户端 2. in、out、inout的区别 in 表示客户端传入的参数 (如:book), 服务端可以完整接受到改对象,但对其修改不会会同步到 客户端传入的参数对象 out 表示客户端传入的参数 (如:book), 服务端接受到的对象为空对象,并且服务端重新new修改改对象,并不会影响客户端传入的参…
Android-Activity启动流程简析
1. 普通Activity创建 - activity向Instrumentation请求创建 Instrumentation通过AMS在本地进程的IBinder接口,访问AMS,这里采用的跨进程技术是AIDL。 然后AMS进程一系列的工作,如判断该activity是否存在,启动模式是什么,有没有进行注册等等。 通过ClientLifeCycleMa…
Android-Window机制token验证
Activity拥有自己PhoneWindow以及WindowManager,同时它的PhoneWindow拥有token;而Application并没有自己的PhoneWindow,他返回的WindowManager是应用服务windowManager,并没有赋值token的过程 token是个Binder对象,他持有ActivityRecord…
Android-Context、Window基础解析
1. Context Context是应用程序与系统之间沟通的桥梁,是应用程序访问系统资源的接口 Context文章源链接 使用到了装饰者模式,把封装操作实现在ContextImpl中。 ContextProvider使用的是Application的context,Broadcast使用的是activity的context Activity的get…
Android-如何判断Activity 上是否有弹窗?
Activity 在 attach 阶段创建了 PhoneWindow,并将 AppToken 存储到 PhoneWindow 中,然后通过 createLocalWindowManager 创建了一个本地的 WindowManager,该实例是 WindowManagerImpl,构造传入的 parentWindow 为 PhoneWindow。…
kotlin-协程基础
1. Flow替换Sequence(SequenceScope类上使用了RestrictsSuspension注解) 2. 冷数据流:flow (消费者消费时才会生产数据) 实际是通过SafeFlow类创建的Flow对象。SafeFlow继承自AbstractFlow。而AbstractFlow同时继承了Flow和 CancellableFlow两…
kotlin-协程异常分析处理(一)
1.CoroutineScheduler internal class CoroutineScheduler(...) : Executor, Closeable { @JvmField val globalBlockingQueue = GlobalQueue() fun runSafely(task: Task) { try { task.ru…
kotlin-协程
1. 基本认识 Kotlin 的编译器检测到 suspend 关键字修饰的函数以后,会自动将挂起函数转换成带有 CallBack 的函数 suspend fun getUserInfo(): String { withContext(Dispatchers.IO) { delay(1000L) } return "BoyCoder" } // Co…
Kotlin-inline、nonline、crossinline
1. inline java中有一个编译时常量的概念,即编译阶段就会确定变量的值,并直接将确定的值- 替换到调用的地方。 kotlin中使用 const val 用于定义编译时常量 函数相应的则使用 inline,并且还会内联当前函数体内的函数。 fun A(B: ()->Unit) { B() print("A") } // 调用A函数的时…