- 博客(7)
- 收藏
- 关注
原创 Kotlin 协程
函数返回类型是否并发是否挂起当前协程是否阻塞线程常用场景launchJob是否否启动任务(不关心返回)async是否(但await()会挂起)否并发获取结果T否(顺序执行)是(直到完成)否切换线程并返回结果CoroutineScope是协程的生命周期边界,定义了一个协程的生存空间,所有协程都必须在某个作用域中运行。控制协程的上下文(CoroutineContext)决定协程的生命周期(什么时候结束 / 取消)
2025-10-12 16:04:46
868
4
原创 简单了解SurfaceView
从源码来看SurfaceView继承自View,所以他也是一个View,但是这个View和普通的View有点不同,简单来说 SurfaceView是一个带有独立Surface的View,拥有自己的缓冲区,可以绕过UI渲染管线,直接交给SurfaceFlinfer进行合成。上面说SurfaceView带有独立的Surface,那这个Surface是什么?Surface什么是Surface?在SDK文档中对于Surface是这样描述的:意思就是“由屏幕显示内容合成器,所管理的原生缓冲器的句柄”简单说就是。
2025-10-07 13:52:27
720
原创 ROOM数据库
所以结合上面所了解的Room本身时不能直接感知声明周期的,他是通过返回生命周期感知的数据容器来实现的(LiveData/Flow)让他们去感知UI的生命周期,从而实现安全的自动的数据监听和刷新。以上就是小编对于Room的一部分理解,如果有什么错误的地方辛苦大佬批判,小编加以改正。
2025-09-21 16:39:37
861
原创 Android之Glide
从上面的源码分析就能看出来:1:当传入的是ApplicationContext的时候Glide是通过ApplicationLifecycle()来绑定生命周期的。2:当传入的不是ApplicationContext的时候Glide是通过创建隐藏的Fragment(RequestManagerFragment)利用内部持有的ActivityFragmentLifecycle再有RequestManager监听回调最终实现生命周期的自动绑定。
2025-09-07 16:44:50
776
原创 Android 在模块化组件化开发过程中,如何感知生命周期,以及模块之间是怎么通讯的?
一般推荐使用 Application Proxy + Lifecycle,统一管理。可选 ContentProvider,但是顺序不可控。业务调用:推荐使用路由框架,接口 + SPI次之消息广播:事件总线(推荐使用Kotlin Flow / ShareFlow)
2025-08-24 18:43:06
436
原创 StringBuffer和StringBulid的区别
(1):StringBuffer:线程安全,StringBuilder:线程不安全 因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有。 (2):缓冲区 StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。 而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。...
2022-03-11 08:28:59
623
转载 Activity的事件分发流程:
事件发生时,最先由Activity接收,然后再一层层的向下层传递,直到找到合适的处理控件。大致如下:Activity — PhoneWindow — DocorView — ViewGroup—>>—View当屏幕被点击的时候,由于view是树形结构,第一步:事件首先会传递给Activity。第二步:传递到View的实现管理类PhoneWindow。第三部:而PhoneWindow是通过他的内部类DecorView 来传递的。第四步:DocorView又会传递给最大的父容器
2022-03-11 08:21:33
670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅