- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 ARouter的分析
1. 注册获取项目中的注解类和字段 函数分析 2. 注册的内容有哪些? (1) IRouteRoot、 (2) IProviderGroup 、(3) IInterceptorGroup3. LogisticsCenter的init()方法做了什么 ClassUtils.getFileNameByPackageName(mContext,ROUTE_ROOT_PACKAGE); 根据包名读取对应的文件路径并且存储在Set<String...
2021-12-10 16:38:32
705
原创 ARouter路由配置
1 、ARouter在build.gradle中defaultConfig中配置 javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME : project.getName()] }}2、添加依赖 annotationProcessor 'com.alibaba;arouter-comp...
2021-12-09 16:32:23
1370
原创 Service的生命周期
service,从它被创建开始,到它被销毁,可以有两条不同的路径: (1) A started service被开启的service通过其他组件调用startService()被创建这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它. 当service被停止时,系统会销毁它。(2)...
2021-12-09 16:23:02
267
原创 深入浅出kotlin协程
因为某些协程的实现使用了任务分发,public fun CoroutineScope.launch ( context : CoroutineContext = EmptyCoroutineContextJob协程的后台工作 、 可以用来将协程取消默认值: Null,public interface ContinuationInterceptor : CoroutineContext.Element负责线程的输入、输出, Dispatcher继承于Co...
2021-12-08 11:44:45
1781
原创 协程的设计
扩展库实际上是对这些更底层API的封装,Continucation<T>类型的参数,Continuation这个单词翻译成中文就是续体,它的声明如下:interface Continuation<in T> { val context : CoroutineContext fun resumeWith(result: Result<T>)}线程的调用存在阻塞和运行两种状态之间的开销,线程状态的切换开销是一个较大的优化点,...
2021-12-08 09:28:08
117
原创 FutureTask创建任务集合,等待执行结果
FutureTaskForMultiCompute inst = new FutureTaskForMultiCompute();//创建任务集合List<FutureTask<Integer>> taskList = new ArrayList<FutureTask<Integer>>();//创建线程池ExecutorService exec = Executors.newFixedThreadPool(5);for( int ...
2021-12-07 16:08:48
250
原创 读写锁ReadWriteLocker
public class ReadWriteLock { // 读锁持有个数 private int readCount = 0; private int writeCount = 0; public synchronized void lockRead() throws InterruptedException { while(writeCount > 0) { wait(); ...
2021-12-07 15:55:36
80
原创 java反射机制JVM加载类
java反射机制是在运行状态中, 对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能成为java语言的反射机制。 类的加载 1. 加载; 加载字节码文件 2. 链接又分为验证、准备、解析 验证: 检验字节码的合法性 准备: 给静态变量分配内存空间, 并且赋初始默认值 解析: 指的是将符号引用转换为直接引用3. JVM的五大区域 1....
2021-11-23 14:38:35
1987
原创 ffmpeg 播放器解码
需要两个线程一个是解码线程、一个是播放线程。解码线程负责多个音频文件的解码, 过滤, 加入队列操作,播放线程则需要从队列中取出处理后的AVFrame, 然后转pcm输入, 通过缓冲回调播放音频,为了初始化这些成员变量, 我们按照每块成员列表定义了对应的初始化方法。int createPlayer(); //创建播放器int initCodecs(char *pathArr); //初始化解码器int initSwrContext(); //初始化SwrContext;...
2021-11-22 16:57:24
1614
原创 BufferedInputStream读取文件
FileInputStream fileInputStream = null;try{ fileInputStream = new FileInputStream(mTempFile); bufferedInputStream = new BufferedInputStream(fileInputStream); byte[] buffer = new byte[2048]; int size = 0; DataProcessor tempDataPro...
2021-11-19 14:47:06
2417
原创 OkHttp中的Request构建
OkHttp中的Request构造函数是私有的, 想要构建Request,只能通过Request.Builderpublic final class Request {private final HttpUrl url;private final String method;private final Headers headers;private final RequestBody body;private final Object tag;private volatile C
2021-11-19 11:11:43
559
原创 记录下HandlerThread的分析
HandlerThread 内部会持有一个Handler, 算是Handler和Thread的一个合体,HandlerThread.start() 的话执行run这个方法,截下源码:@Overridepublic void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notify...
2021-11-16 17:11:53
1041
原创 Kotlin的单例、静态对象、匿名内部类、工厂方法
1. 关键字Object 这个关键字在kotlin中用以修饰类,在声明类的同时直接就给我们创建了这个类的一个实例,而我们在访问这个类的时候就可以直接通过类名,例如: object Publisher { val name:String = "my username" } fun main() { val publisher: Publisher = Publisher ...
2021-11-12 15:15:32
4308
原创 为什么Handler提供了一个Callback接口
/** * Callback interface you can use when instantiating a Handler to avoid * having to implement your own subclass of Handler. */public interface Callback { /** * @param msg A {@link android.os.Message Message} object * @return True if n.
2021-11-09 16:46:57
641
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人