1. ? 和 !! ?加在变量名后,系统在任何情况不会报它的空指针异常。!!加在变量名后,如果对象为null,那么系统一定会报异常! 上述是两个符号的简单概念,为了更好的解...
第一、前言 ThreadLocal使用的是自定义的ThreadLocalMap,接下来我们来探究一下ThreadLocalMap的hash冲突解决方式。 ThreadLoca...
第一、前言 有些程序员在使用ThreadLocal的过程中会发现有内存泄漏的情况,就猜测这个内存泄漏与Entry中使用了弱引用的key有关系。 第二、内存泄漏的相关概念 1....
singleInstance的Activity启动的Activity从属TaskRecord问题,其实不看在哪创建,而是要看taskAffinity属性,楼主实验的情况,ThirdActivity与MainActivity都是默认同一个taskAffinity,所以压入同一个栈,如果把ThirdActivity的taskAffinity改的与MainActivity不同,那么他就会新建TaskRecord了。另外SecondActivity一方面与MainActivity的taskAffinity相同,一方面是singleInstance需要创建新的独享的TaskRecord,所以存在taskAffinity冲突,所以在任务栈中是不显示的。
场景:singleinstance的Activity启动其他Activity会怎样?四种启动模式的具体内容大家可能都比较清楚了,但有些关于singleinstance启动模式的场景却有点不太清楚。我们都知道singleinstance模式的Activity会...
应该是写的有一点点问题,流程应该是这样的:1. ViewRootImpl#scheduleTraversals开启同步屏障;2. Choreographer#postCallback中发送异步消息;3.经过一系列调用,发送完,开始回调,执行callback中的runnable,就是mTraversalRunnable,也就是执行ViewRootImpl#doTraversal(),其中就会取消同步屏障
[转]Android 消息机制中的同步屏障机制1、引言 我们知道,Android的消息机制就是Handler、Looper、Message、MessageQueue之间的运作机制。本文假设大家对 它们都已经有所了解,所以...
1. 什么是插桩? 用通俗的话来讲,插桩就是将一段代码通过某种策略插入到另一段代码,或替换另一段代码。这里的代码可以分为源码和字节码,而我们所说的插桩一般指字节码插桩。下图是...
Handler相关 1. 用一句话概括Handler,并简述其原理 Handler是Android系统的根本,在Android应用被启动的时候,会分配一个单独的虚拟机,虚拟机...
1. 可以用今日头条的适配方式,修改系统的density 1.1 先确定按宽还是高为基准,进行缩放适配。举例选宽1.2 代码中获取设备的宽的像素值 / 设计稿宽的 dp值 =...
CoroutineScope: 定义新协程的范围。每个协程构建器都是CoroutineScope的扩展,并继承其coroutineContext以自动传播上下文元素和取消。获...
在之前写过这样的一个例子,先来回顾一下: 也就是来演示runBlocking与coroutineScope之间的异同点,当时还阐述了一个对它的理论描述,也来回顾一下: 这里再...