![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android 系统学习笔记
文章平均质量分 55
Android系统学习笔记
蜗牛
这个作者很懒,什么都没留下…
展开
-
Handler源码分析笔记
1.handler线程切换原理 消息发送和消费两者之间是基于内存共享机制,共享一份消息队列。采用ThreadLocal对线程进行管理,保证 每个线程上的Looper是相互独立的。在发送消息的过程中由Message去持有发送者的实例(Handler),导致处理消息的时候是哪个线程上创建的Handler就在那个线程上处理消息。 2.Looper为什么不会阻塞主线程? ActivityThread main方法是Android app的入口,Looper.loop()方法必须死循环挂起,它如果.原创 2022-03-02 15:37:56 · 201 阅读 · 0 评论 -
Binder的简单了解笔记
一、Binder是什么? Binder是Android 进程间通信机制之一(IPC) 二、为什么一线企业开发的app要使用多线程? 1.突破进程内存限制:因为虚拟机分配给各个进程的运行内存是有限制的,LMK(低内存杀死机制)也会优先回收对系统资源占用多的进程。 2.功能稳定性:独立的通信进程保持长链接的稳定性。 3.规避系统内存泄漏:独立的webview进程阻隔内存泄漏导致的问题。 4.隔离风险:对于不稳定的功能放入单独的进程,避免导致主线程崩溃。 三、查看某个手机一个进程分配的运行内原创 2022-03-01 11:17:14 · 2402 阅读 · 0 评论 -
Retrofit源码分析笔记
一.仅使用okhttp进行网络请求存在的四个问题。 1.复杂的接口配置需要手动进行(body、请求头、参数) 2.需要手动解析response body 3.无法自动完成线程切换 4.嵌套网络请求会陷入“回调陷阱” 二.okhttp和retrofit分别的职责是什么? 1.okhttp和retrofit都是square公司开发的,okhttp的设计初衷只是单一的进行网络请求,是基于http协议来的。 2.retrofit是RESTful风格的http网络框架,retrofit进行网络请求的本质原创 2022-02-23 10:43:42 · 1778 阅读 · 0 评论 -
WorkManager的学习和使用要点笔记
1.在oppo Android 5.1手机上报错Invoke-customs are only supported starting with Android O 解决办法:在app的build.gradle中添加 android{ compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } 2.Wor原创 2022-02-21 10:12:54 · 1442 阅读 · 0 评论 -
代理模式的学习
代理模式分类 1.静态代理模式 2.动态代理模式 静态代理模式 1.委托对象与代理对象需要实现相同的接口 2.代理对象的构造方法中传人委托对象实例 动态代理模式(通过反射机制动态生成代理者的对象) 一、动态代理类 import java.lang.reflect.InvocationHandler import java.lang.reflect.Method class DynamicProxy(val any: Any) : InvocationHandler { over原创 2022-02-14 11:47:28 · 201 阅读 · 0 评论 -
内存抖动相关
目录 内存抖动的定义 内存泄漏和内存抖动的影响 避免内存抖动(避免在很频繁调用的方法中创建对象) 内存抖动的定义 内存频繁地分配和回收,它伴随着频繁的GC。 内存泄漏和内存抖动的影响 内存泄漏:可用内存越来越少 -> OOM 内存抖动: 1.卡顿(进行垃圾回收的时候,其他线程会被挂起,比如点击一个按钮,但是在进行gc操作,ui线程被挂起,无法响应点击事件) 2.OOM(如果使用标记-清除算法的话,频繁的进行垃圾回收会导致内存碎片化,连在一起的内存不足以分配给新的对象的时候就会报原创 2021-12-13 11:05:07 · 1435 阅读 · 0 评论