自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

古苏的博客

集中起来的意志,可以击穿顽石!

  • 博客(10)
  • 收藏
  • 关注

原创 SwipeBackLayout递归崩溃分析ViewGroup.resetResolvedLayoutDirection

这里我们就明白了,出现递归的原因是如果添加的是自己,这里会获取到自己View child,又调回ViewGroup.resetResolvedLayoutDirection,在这个方法无限递归,直到 Fatal Exception: java.lang.StackOverflowError。关注,表示布局如果是继承的,则重置rtl 属性,主要是处理左右布局方向。阿拉伯国家是从右到左布局,跟我们是反的,所以谷歌引进了这个rtl属性进行管理布局方向。解决办法:在添加view的时候,检查,禁止添加自己。

2024-09-09 12:02:46 735

原创 suspendCoroutineUninterceptedOrReturn函数的实现原理

kotlin编译器如下方法,在编译时会把contract契约声明解析成生成 block.invoke(continuation) 字节码调用,内联插入调用的地方。比原有的方法多了一个Continuation $completion参数,这玩意就是编译器干的活,根据上面的契约声明,把block函数内联调用优化到一个函数去。比较弯弯绕绕,需要kotlin反编译去看,以及结合编译器,有兴趣可以去了解kotlin的编译器,都是开源的。

2024-09-05 00:09:41 303

原创 RxJava源码简单分析

source就是我们传递进来的实现ObservableOnSubscribe的逻辑,然后由我们调用Emitter的.next,这里就是 CreateEmitter.next,最后调用到LambdaObserver.next方法,执行回调函数。LambdaObserver代理了onNext, onError, onComplete, onSubscribe四个基本函数接口实现。核心启动方法 subscribeActual(observer);他实现了 subscribeActual方法。

2024-08-19 15:12:45 203

原创 kotlin启动协程源码分析

IntrinsicsKt.createCoroutineUnintercepted 创建一个不拦截执行的Continuation,基中$this$startCoroutineCancellable是编译期生成的代码function2传入的。由上面可知传进来的是 CoroutineStart.DEFAULT,内部有个invoke方法,CoroutineStart是个枚举值,这里的值是1,会执行。//3&2 = 0011 & 0010 = 0010 = 2 不为0,则为RESUMED 支持恢复执行。

2024-08-11 15:34:18 819

原创 谷歌Android增量文件系统incfs(Incremental File System )

Incremental FS(IncFS)是谷歌在2019年提出的一个计划用于Android应用下载更新的文件系统[2]。IncFS不允许直接写入文件,并且追加写后的内容也永不改变。它允许在大型Android应用程序的二进制文件和资源没有完全加载到Android设备上之前运行。如果应用读取的内容尚未加载,它需要等待数据块被提取,但是在大多数情况下是热块可以预先加载,并且应用程序几乎可以立即流畅运行。

2024-07-29 22:26:59 799

原创 Window 10 使用WSL2下载编译Android 10 系统源码,并用sourceInsight 4 看系统源码

一、Window 10 安装WSL2安装教程来自微软官网:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10步骤 1 - 启用适用于 Linux 的 Windows 子系统需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。以管理员身份打开 PowerShell 并运行:PowerShell复制dism.exe /online /ena.

2021-07-25 17:52:58 4498 5

原创 低端机Arouter初始化耗时分析与优化

Android 项目中用到了阿里开源路由框架 https://github.com/alibaba/ARouter但是低端机首次安装启动发现耗时比较长,那么我们分析一下原因,read thd fuck source code初始化逻辑:ARouter.init方法 /** * Init, it must be call before used router. */ public static void init(Application application)...

2021-06-29 01:41:49 1464

原创 Activity配置android:multiprocess=“true“ 作用?

最近看腾讯开源的插件化框架shadow,发现宿主的Activity容器配置了android:multiprocess="true" 这个属性有什么作用? <activity android:name="com.tencent.shadow.sample.plugin.runtime.PluginDefaultProxyActivity" android:configChanges="mcc|mnc|locale|touc...

2021-06-27 17:10:12 2097 1

原创 tag requires a 'drawable' attribute or child tag defining a drawable 错误解决

开发过程中出现错误 android.view.InflateException: Binary XML file line #48: Binary XML file line #48: Error inflating class TextView

2017-10-11 15:30:54 845

原创 学习Java 泛型 Type体系

最近在看retrofit2源码,框架的大致原理就是在okhttp的基础上利用注解和动态代理自动生成okhttp的request,抽象地理解就是利用注解表示请求体。在源码中看到里面有很多Java泛型,通过反射去获取泛型信息。如果说要看懂反射的泛型代码,那必须对泛型有足够的了解,其中Java 泛型 Type体系可是重中之重。Type体系中Type接口是最顶层接口,用于表示JAVA的类型,包括 raw t

2017-07-14 15:30:10 489

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除