Gson之基础使用篇
Gson基础使用
Gson属于是Java生态的必备技能,很有必要深入学习。
依赖引入
Gradle
123dependencies { implementation 'com.google.code.gson:gson:2.10.1'}
Maven
12345<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>
什么是Gson
Gson是一个Google开源的JSON序列化和反序列化框架
Gson设计目标
提供一个简单如toString方法般的机制实现Java对象到JSON字符串的互相转化
对于预定义的Java Bean实现无侵入式
允许自定义对象的序列化和反序列化
生成紧凑的、可读的JSON输出
使用Gson
Gson采用的是门面模式, ...
Android源码构建
Android 源码编译基础要求硬件要求官网链接
环境配置官方链接
源码下载创建文件夹1mkdir aosp
安装源代码控制工具1234mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
配置repo12vim ~/.bashrcexport REPO_URL='https://mirrors.bfsu.edu.cn/git/git-repo'
初始化镜像仓库分支列表
1repo init -u https://mirrors.bfsu.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r47
编译设置环境1source build/envsetup.sh
选择编译目标1lunch
构建类型
使用情况
user
权限受限;适用于生产环境
userdebug
与 ...
记一次WSL扩容问题
记一次WSL扩容问题背景
昨日心血来潮,突发地想打一个自己的Android镜像。
所以呢拉了aosp的源代码,sync过程异常平稳(除了跑了我50G+流量…),
构建的过程出了一个小插曲吧,wsl 报了一个空间不足。
环境WSL 2 + Ubuntu 22.04
解决过程
第一我肯定不会认为这是aosp的锅,所以定是不会去aosp查issue。
既然是空间不足,这一定是系统的问题,而系统是wsl,不去微软官网查解决方法还真没别的了。
既然是空间异常铁定是找磁盘管理专栏doc了
事后总结简单来说就是wsl的ex4.vhdx文件是有大小限制的。
虚拟大小
WSL Ubuntu认为的大小空间,即WSL内lsblk的大小
物理大小
WSL是在Windows平台运行的,所有的文件内容是存储在ext4.vhdx中的,此大小指的是占据宿主机的空间。
下图表示
WSL能用的最大空间是500G
WSL Ubuntu占用的内容加载一起占据物理机182G
检测一下
gain简单认识了如下3个linux磁盘相关的指令
df
Linux df(英文全拼:disk fre ...
Gradle之Daemon启动流程
Gradle Daemon
先会尝试连接daemon,如果没有daemon可用尝试通过connector.startDaemon开启新的daemon
123456789101112131415161718192021222324252627282930313233343536public BuildActionResult execute(BuildAction action, BuildActionParameters parameters, BuildRequestContext requestContext) { UUID buildId = idGenerator.generateId(); List<DaemonInitialConnectException> accumulatedExceptions = Lists.newArrayList(); // Attempt to connect to an existing idle and compatible daemon int saneNumberOfAttempts = ...
Rxjava3序言
Rxjava3
Rxjava其实在很早以前有过学习和了解,但是当时由于没有记笔记的习惯,难以整理成体系化的笔记,零零散散。
本系列笔记学习基于io.reactivex.rxjava3:rxjava:3.1.6
概念RP
RP即Reactive Programming(响应式编程)
所谓的响应式即变化是可传播的,即发生变化后这种变化会如同”病毒“一样扩散出去。
假如计算一个式子
c = a + b
命令式和响应式写法如下
None RP
123456789101112131415161718public class NoneRP { public static void main(String[] args) { int a = 1; int b = 2; int c = a + b; // 3 System.out.println(c); a = 2; b = 3; // 由于逻辑处理没有采用响应式,所以a b的变化不会扩散到c,即abc的值 ...
Http2连接建立
Http/2连接建立过程
Http协议概述
http2支持http1.1的所有功能,并比http1.1更高效
HTTP/2 中的基本协议单元是一个帧。每种帧类型都有不同的用途。
协议标识HTTP/2有两个版本标识:
h2: 构建与TLS之上的HTTP/2协议实现, 在连接的TLS握手阶段, 通过TLS扩展协议的ALPN字段标识。
h2c: 基于明文的TCP传输的协议实现, 在HTTP1.1升级协商阶段的Upgrade字段标识。无安全性保障。
h2c
在并不知道对方是否支持http2的情况下。
http客户端通过使用http升级机制建立http2连接
客户端发送
12345GET / HTTP/1.1Host: server.example.comConnection: Upgrade, HTTP2-SettingsUpgrade: h2cHTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
服务端响应(如果不支持http2连接)
1234HTTP/1. ...
Android线程通信
Handler
Android是支持多线程的,不同线程如何进行通信,底层就是依靠的Handler进行通信。
这里的Handler不是指的Java的Handler,更确切的说是Handler机制。
熟知的有Java层的Handler,但是被遗忘的有Native 层的Handler。
Java的线程通信事件处理是由Java/Native两层Handler共同协作完成。
结构跨线程通信需要用到如下类
Handler
信息的传递者,如果某个线程有通信的需要就需要持有一个Handler对象,由Handler对象完成线程间信息的传递。
同时也是消息的处理者
Looper
默认情况下的线程是不支持通信的,因为默认情况线程是顺序执行,停下来时线程就停止了。而Looper即是对于线程的一层封装让其死循环去寻找事件。
MessageQueue
事件的容器
Message
事件实体,包含了信息
使用
Looper准备
1Looper.prepare()
handler实例化
12345val handler = Handler(Looper.myLoope ...
Android Process基础之创建
Android ProcessJava Process API
直接通过Java Process API创建
123456789101112131415161718192021const val TAG = "com.example.process"class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 创建进程并开启 val process = ProcessBuilder("echo","hello world") .start() // 等待至进程退出 val waitFor = process.waitFor() // 如果 ...
Java Thread
Java Thread构造函数
数目很多,但是全部都会调用到private的6参构造方法
1234567891011121314151617181920212223242526272829303132333435363738public Thread() { this(null, null, "Thread-" + nextThreadNum(), 0);}public Thread(Runnable target) { this(null, target, "Thread-" + nextThreadNum(), 0);}public Thread(String name) { this(null, null, name, 0);}public Thread(ThreadGroup group, Runnable target) { this(group, target, "Thread-" + nextThreadNum(), ...
Java Process
Java基础之Process
进程属于是操作系统的资源,Java对其亦是开箱支持的
相关的类有
java.lang.Process
java.lang.ProcessBuilder
java.lang.ProcessHandle
Process
Process是一个抽象类,只有一套模板
1public abstract class Process
IO12345public abstract OutputStream getOutputStream();public abstract InputStream getInputStream();public abstract InputStream getErrorStream();
同步12// 使得当前线程一直等待,直到进程执行完毕public abstract int waitFor() throws InterruptedException;
1234567891011121314151617181920// 等待指定时间,超时即退出public boolean waitFor(long timeout, ...












