Android进阶笔记
文章平均质量分 92
今阳
这个作者很懒,什么都没留下…
展开
-
Android进阶笔记-7. Context详解
【代码】Android进阶笔记-7. Context详解。原创 2022-09-28 17:42:31 · 717 阅读 · 1 评论 -
探索Android开源框架 - 11. 热修复原理
热修复技术介绍重新发布版本代价大,成本高,不及时,用户体验差,对此有几种解决方案:Hybird:原生+H5混合开发,缺点是人工成本搞,用户体验不如纯原生方案好;插件化:移植成本高,对老代码的改造费时费力,而且无法动态修改;热修复技术,将补丁上传到云端,app可以直接从云端下来补丁直接应用;热修复技术对于国内开发者来说是一个比较实用的功能,可以解决如下问题:发布新版本代价较大,用户下载安装成本高;版本更新的效率问题,需要较长时间来完成版本覆盖;版本更新的升级率问题,不升级版本的用原创 2022-01-14 18:45:38 · 1637 阅读 · 0 评论 -
Android进阶笔记-5. IPC机制 & Binder 原理
IPC机制一次进程间通信至少包含两个进程,由于进程隔离机制的存在,通信双方必然需要借助 IPC(进程间通信,inter-Process Communication)来实现;Linux中的IPC机制种类管道(pipe)继承自Unix,半双工通信方式(数据只能在一个方向上流动);原理:通信双方利用内存的共享文件来传递信息;信号(sinal)异步通信方式,软件层对中断机制的一种模拟,例如内核通知用户空间进程发生了哪些系统事件不适用于信息交换,适用于进程中断控制;信号量(semophore原创 2022-01-12 18:42:12 · 870 阅读 · 0 评论 -
Android进阶笔记-4. BroadcastReceiver的注册、发送和接收
关于BroadcastReceiverBroadcastReceiver(广播接收者)是一个系统全局的监听器,用于监听系统全局的Broadcast广播消息,使用观察者模式,基于消息的发布/订阅事件模型;广播的分类普通广播:开发者自身定义intent的广播;系统广播:Android中内置的多个系统广播,每个广播都有特定的Intent - Filter;有序广播:发送的广播被广播接收者按照priority属性值大小排序,priority相同的,动态注册的广播优先//发送有序广播val in原创 2022-01-11 18:58:56 · 1286 阅读 · 0 评论 -
Android进阶笔记-3. Service 启动过程 & 绑定过程
startService和bindServiceService的启动方式主要有两种,分别是startService和bindService使用startService启动时是单独开一个服务,与Activity没有任何关系,而bindService方式启动时,Service会和Activity进行绑定,当对应的activity销毁时,对应的Service也会销毁startService多次,onStart()会执行多次,onCreate()只执行一次,onStartCommand()也会执行多次。bi原创 2022-01-07 18:44:42 · 1953 阅读 · 0 评论 -
重学Java系列-2. JVM内存模型 & 类加载机制
Java内存模型 & JVM内存分区线程之间的通信在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。共享内存:线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。消息传递:线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信,在java中典型的消息传递方式就是wait()和notify(),notifyAll()。Java内存模型Java的并发采用的是共享内存模型,JMM决定一个线程对共享变量的写入何时对另一原创 2022-01-06 15:57:04 · 945 阅读 · 0 评论 -
重学Java系列-1. GC原理 & 垃圾回收算法
GC原理GC即垃圾收集,追踪仍然使用的所有对象,并将其余对象标记为垃圾然后进行回收;GC判断策略(例如引用计数法,可达性分析法)GC收集算法(标记清除法,标记清除整理法,标记复制清除法,分带法)GC收集器(例如Serial,Parallel,CMS,G1);判断策略(哪些内存需要回收)引用计数法:每个对象都有一个引用计数器,当对象被引用一次的时候,计数器+1,当对象引用失效的时候,计数值-1,实时性, 但不能解决循环引用的问题;可达性分析法:从GC Root作为起点开始搜索,,那么整原创 2022-01-04 18:24:18 · 370 阅读 · 0 评论 -
干掉RxJava系列--2. 手写FlowBus替代RxBus/EventBus/LiveDataBus
LiveData的不足LiveData 是一个专用于 Android 的具备自主生命周期感知能力的可观察的数据存储器类,被有意简化设计,这使得开发者很容易上手,但其不足有如下两点:LiveData只能在主线程更新数据(postValue底层也是切换到主线程的,而且可能会有丢数据的问题);LiveData操作符不够强大, 对于较为复杂的交互数据流场景,建议使用 RxJava 或 Flow;LiveData与Android平台紧密相连,虽然LiveData在表现层中运行良好,但它并不适合领域层,因原创 2021-12-31 10:10:32 · 1725 阅读 · 0 评论 -
干掉RxJava系列--1. 手写权限请求替代RxPermission
起因最近在对公司项目做APK包体积优化, 其中少不了对一些不必要的三方库的移除,在此过程中发现项目中居然有一系列的Rx相关库,RxJava,RxBus,RxPermission,于是心中起了一丝杀意。当然RxJava还是相当强大的,基于事件流的链式调用,进行耗时任务,线程切换,是一个很好的异步操作库,毕竟我上一个系列文章才写过探索Android开源框架 - 3. RxJava使用及源码解析,如果想更深入的了解RxJava的话可以看一下,不过随着现在kotlin的普及,其协程和Flow基本也可以替代Rx原创 2021-12-29 19:06:53 · 726 阅读 · 0 评论 -
探索Android开源框架 - 10. 插件化原理
什么是插件化插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件将app中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现app功能的动态扩展;插件框架有两个作用:一是“自解耦”,二是“免安装”自解耦指的是一个应用原本由一份代码编译而成,希望改成将其中的一些功能单独编译,像插件一样动态插在主应用上。这样一来可是使主应用体积变小,下载安装更方便。二来可以是比较独立的功能可以单独开发调试,甚至单独更新版本。免安装指的一个应用原本需要安装过程才能启动运行原创 2021-12-27 14:40:49 · 458 阅读 · 0 评论 -
探索Android开源框架 - 9. ARouter使用及源码解析
最近对项目进行组件化重构,要进行组件化就少不了组件间通信的路由,于是就再次研究了一下阿里的ARouter,关于组件化可以查看我之前写的组件化架构系列文章,这里就不过多提及了Android组件化架构 - 1. 组件化基础Android组件化架构 - 2. 组件间通信机制(1)Android组件化架构 - 2. 组件间通信机制(2)Android组件化架构 - 3. 组件间跳转 & ARouter路由Android组件化架构 - 4. 动态创建 & 反射机制Android组件化架.原创 2021-12-10 19:12:05 · 2044 阅读 · 0 评论 -
探索Android开源框架 - 8. Gson使用及源码解析
Gson 是 我们经常用来在 Java 对象和 JSON 数据之间进行映射的 库,今天我们就来分别讲一讲其使用和源码分析使用详解1. 基本的解析与生成Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化解析基本数据类型val gson = Gson()val i = gson.fromJson("100", Int::class.java) //100val d = gson.fromJson("99.99", D.原创 2021-12-03 18:17:36 · 2544 阅读 · 0 评论 -
探索Android开源框架 - 7. LeakCanary使用及源码解析
简介LeakCanary是Square公司研发的一个可视化的内存泄漏分析工具LeakCanary2.x从2.x版本开始有了比较大的升级完全使用Kotlin重写;使用新的Heap分析工具Shark,替换了之前的haha,按官方的说法,内存占用减少了10倍泄露类型分组使用添加依赖最新的LeakCanary只需引入依赖,不需要初始化代码,就能执行内存泄漏检测;debugImplementation 'com.squareup.leakcanary:leakcanary-andr原创 2021-11-15 16:43:49 · 2492 阅读 · 0 评论 -
探索Android开源框架 - 6. ButterKnife使用及源码解析
相关知识ButterKnife中最重要的就是先自定义注解,再通过APT在编译期解析注解,解析器中又会用到反射,然后通过javapoet库来生成模板代码,要想学习其源码,首先要基本的了解注解和反射的知识;注解Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制;Java中的类、方法、变量、参数和包等都可以被标注,Java 标注可以通过反射获取标注内容;在编译器生成类文件时,标注可以被嵌入到字节码中,Java 虚拟机可以保留标注内容,在运行时可以获取原创 2021-11-11 11:25:05 · 1705 阅读 · 0 评论 -
探索Android开源框架 - 5. EventBus使用及源码解析
相关概念定义Android事件发布/订阅框架,简化应用程序内组件间,组件与后台线程间的通信;优点代码简洁,使用简单,将事件发布和订阅充分解耦;五种ThreadModePOSTING(默认)接收事件方法应执行在发射事件方法所在的线程MAIN接收事件方法应执行在主线程MAIN_ORDERED接收事件方法会被扔进 MessageQueue 中等待执行BACKGROUND发射事件方法在主线程中执行,则接收事件方法应执行在 EventBus 维护的单一子线程 执行发射原创 2021-10-19 15:13:05 · 796 阅读 · 0 评论 -
探索Android开源框架 - 2. Retrofit使用及源码解析
Retrofit是目前Android最优秀的网络封装框架,是对OkHttp网络请求库的封装App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作;服务器数据返回后,OkHttp将原始的结果交给Retrofit,根据用户需求对结果进行解析;使用简单使用添加依赖retrofit2内置了OkHttp,所以无需再单独添加OkHttp依赖了implementation 'com.squareup.retrofit2:retr.原创 2021-09-17 14:42:09 · 204 阅读 · 0 评论 -
探索Android开源框架 - 1. OkHttp源码解析
使用1. 添加依赖implementation 'com.squareup.okhttp3:okhttp:3.14.9'2. 常用请求方法1. 同步GET请求执行请求的操作是阻塞式的,直到http响应返回1. 创建OkHttpClient对象直接创建val client = OkHttpClient()通过Builder模式创建val client = OkHttpClient.Builder() .build()2. 创建Request对象val requ原创 2021-09-14 17:09:59 · 266 阅读 · 0 评论