- 博客(58)
- 资源 (2)
- 收藏
- 关注
原创 JVM之Reference源码分析
本文基于JDK1.8.0_271分析,native源码下载自openJDK官网(build 1.8.0_41-b04)0. 前言JDK1.2开始,引入了一个新的包,java.lang.ref:java.lang.refFinalizer.classFinalizerHistogram.classFinalReference.classPhantomReference.classReference.classReferenceQueue.classSoftReference.cl.
2021-03-21 16:58:13
588
原创 Jetpack源码 之 LiveData
0. 前言LiveData是Jetpack中一个响应式开发框架,官方文档对它的说明是一种可观察的数据存储器类,具有生命周期感知能力。有点类似于感知生命周期的RxJava。0.1 用法通常LiveData都是结合着ViewModel使用的,一般都是在ViewModel中创建LiveData:class MvvmViewModel : ViewModel() { // 通过MutableLiveData创建一个可读可写的LiveData // 设置为Private,避免外部对数据直接进
2020-08-22 16:31:21
347
原创 Android源码之SharedPreferences
0. 前言SharedPreferences可以说是Android中最常用的一种存数据到文件的方式。他的数据是以键值对的方式存储在 ~/data/data/包名/shared_prefs 这个文件夹中的。这个存储框架是非常轻量级的,如果我们需要存一些小数据或者是一个小型的可序列化的Bean实体类的,使用SharedPreferences是最明智的选择。1. 使用方法1.1 获取SharedPreferences在使用SharedPreferences前,我们得先获取到它。由于SharedPref
2020-07-05 22:06:46
546
原创 LiveData的map()和switchMap
官方文档中的介绍在Android Developer官网上,对于map和switchMap的解释是这样的:map:Applies a function on the value stored in the LiveData object, and propagates the result downstream.对存储在 LiveData 对象中的值应用函数,并将结果传播到下游。switchMap:applies a function to the value stored in the
2020-06-24 23:03:40
7035
2
原创 Kotlin入门(四)——类和对象的进阶
本章内容包括:可空性数据类密封类枚举类0. 前言在上一篇《Kotlin入门(三)——类、对象、接口》我们只聊到了Kotlin中基本类的写法以及继承,但是我们说过,Kotlin的本质就是解决Java的繁琐,如果Kotlin只有这么简单的话怎么还能被称为Kotlin。首先我们思考在Java中的几个场景:在方法中每次都得对传进来的对象进行判空,并且很多时候都会忘记判空或者不知道别人在调用你这个方法的时候到底会不会给空,然后就导致程序空指针异常了void nullTest(Obj o.
2020-06-23 20:06:02
340
原创 Kotlin入门(三)——类、对象、接口
本章内容包括:类的基本要素类的继承结构可见性修饰符接口0. 前言在上一篇的末尾,我们提到了Kotlin的包和导入。原本我是准备把这篇的内容也放在上一篇的,但是后来一想,这张的内容会很有点多,放进去的话可能会导致上一篇太大了,所以就单独分成一篇了。在说类之前,我们先来看下一个类的Java版和Kotlin版的对比,这个会一下子就让你对Kotlin感兴趣。我们现在有一个需求,需要定义一个JavaBean类Person,这个类中包含这个人的姓名、电话号码以及地址。我们先来看下Java的实.
2020-06-09 18:49:08
290
原创 Kotlin入门(二)——基本类型、包
本章内容包括:kotlin的基本类型包类与对象0. 前言在上篇文章我们涉及到了kotlin的一些最基本的语法内容,并完成了kotlin的HelloWorld。但是上篇我们在谈到类的时候,说了只介绍下最基本的类,于是在这篇,我们就着重看下类和对象。但是在说到类之前,我们先来看下基本类型。1. kotlin的基本类型在说基本类型之前,我们先提及一个Kotlin的基本定义,也是Kotlin和Java最明显的区别之一:在kotlin中,所有的东西都是对象那么熟悉Java的同学可能要说了:.
2020-05-29 10:56:57
479
原创 Kotlin入门(一)——基本要素
本章内容包括:kotlin的HelloWorld变量、智能转换函数控制流0. 前言我之前写过一篇《Kotlin入门》博客,但是一方面是这篇博客写的比较早,写的时候单纯是为了学习anko而写的,所以感觉写的并不好,另一方面,在写的时候只是写了点基础知识,当时也没有系统的学习kotlin。所以在看完kotlin实战后,就想回过头来写一篇总结博客写这个主要是为了几个目的:对于看我博客的人来说有一个更加系统更加全面更加完善的kotlin入门指南。对于我自己,单纯的看书还是不够好,就写一.
2020-05-27 13:09:16
634
2
原创 2019年Android寒假实习面经-小米+字节跳动(已拿抖音offer)
天学网一投过去HR就加我微信了,结果说我实习时间不合适,没给面试映客实习僧投递过去到现在都没看我简历小米-一面面向对象的理解Java三大特性内部类、匿名内部类finalstatic死锁特性synchronizedwait、sleep线程池Handler(什么时候和线程进行绑定的)Activity生命周期Activity启动模式ContentProvider...
2019-12-28 16:44:27
1954
2
原创 Android网络请求6--解析Glide缓存机制
1. 简介Glide缓存分为两部分,分别为内存缓存和硬盘缓存。其中内存缓存的主要作用是防止应用重复地将图片数据读取到内存中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。内存缓存和硬盘缓存的配合才实现了Glide极佳的图片缓存效果。2. 缓存Key大家都知道,如果想缓存一个东西的话,必然会有对应的缓存key。那么Glide的缓存key在哪呢?首先我们来看下Engi...
2019-12-03 14:13:38
318
原创 Java锁机制
悲观锁和乐观锁乐观锁和悲观锁都是一种广义上的概念。对于同一个数据的并发操作,悲观锁确实很悲观,它时时刻刻都非常担心自己在读取或者写入数据的时候有其他线程来修改数据,所以为了安心,他一般就直接从读取数据的时候就加锁,确保自己操作的时候不会被其它线程打扰。最典型的悲观锁就是synchronized和Lock。而乐观锁确实很乐观,它认为自己在操作数据的时候是不会有其他线程来修改数据的,所以丝毫不担...
2019-11-28 22:34:51
439
原创 深入理解JVM-类加载器
1. 概念虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成字节码(.class 文件)。...
2019-11-24 21:58:01
139
原创 深入理解JVM-虚拟机类加载机制
1. 概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。Java类型的加载、连接和初始化过程都是在程序运行期间完成的,为Java应用程序提供高度的灵活性2. 类加载的时机类从被加载到虚拟机内存中开始,到卸载处内存为止它的整个生命周期包括:加载(Loading)验证 (Veri...
2019-11-24 15:44:28
146
原创 Java集合源码之HashMap
1. 简介HashMap是一个哈希表,线程不安全,key唯一,value可重复,允许key和value为null。遍历时是无序的。底层结构是基于链表散列,也就是数组+链表。数组也被称为哈希桶,桶里面就装着链表,链表中的每个节点,就是哈希表中的每个元素。在JDK8中,当链表长度达到8的时候,就会转为红黑树。它实现了Map<K, V>, Cloneable, Serializabl...
2019-11-22 20:10:31
162
原创 Java集合源码之ArrayList
1. 简介ArrayList可以说是我们最常用的一种集合了。他的本质是一个数组,一个可以自动扩容的动态数组,线程不安全,允许元素为null。由于数组的内存连续,可以根据下标以O(1)的时间读写元素,因此时间效率很高。2. 内部属性我们先来看下ArrayList里面有哪几个属性:private static final long serialVersionUID = 86834525...
2019-11-18 22:10:52
166
原创 Android消息机制之Handler 详解
简介作为一个Android开发者,Handler的大名你一定听过。做Android开发肯定离不开Handler,它通常被我们用来连通主线程和子线程。可以说只要有异步的地方一定有Handler。那么,你了解过为什么Handler能连通主线程和子线程吗,也就是说,你了解过Handler背后的原理吗?就让本文带你了解。Handler的基本用法按照惯例,我们首先看下Handler的一般用法:...
2019-11-17 14:40:51
313
1
原创 Android消息机制之ThreadLocal
简介ThreadLocal是一个线程内部的数据储存类,通过他可以在指定的线程中存储数据。数据存储以后,只有在指定的线程中可以获取到存储的数据,对于其他线程来说则无法获取。在源码中是这样写的:This class provides thread-local variables. These variables differ fromtheir normal counterparts in...
2019-11-08 23:00:19
358
原创 View的事件分发
从我刚进实验室的时候,学长学姐就说View的事件分发机制是Android里面一个很重要的内容,要我们好好学。但是随着自己对Android了解的深入,越发觉得这个东西很有必要了解下,正好Android艺术开发探索也看到了View这块,也看了郭霖大神的博客和另一位大神的博客,所以就好好学习了一番,并写了此博客。1. MotionEvent在开始讲View事件分发之前,我们先来了解下MotionE...
2019-10-31 22:57:13
215
原创 Camera2官方样例解读
样例地址:android/camera-samples/Camera2BasicJava/ - Github大家可以把项目下载到本地并用AndroidStudio打开了再看简介在Android5.0的时候,谷歌推出了Camera2API,较上一代Camera1,Camera2支持了很多Camera1所不支持的特性:更先进的API架构可以获取更多的帧信息、以及手动控制每一帧的参数对...
2019-10-26 22:13:45
1638
原创 OpenGL ES 2.0笔记2——顶点、坐标、图元
顶点在OpenGL中,所有的东西的结构都是从一个顶点开始的。所谓顶点,就是一个几何图形的拐点。在介绍顶点之前,我们首先介绍下OpenGL坐标。OpenGL坐标系如果有会Android开发的朋友,一定会默认为从屏幕的左上角开始,水平往右是x轴,竖直向下是y轴。但是在OpenGL中是不同的,OpenGL是从显示视窗的正中心是中心,也就是(0,0)(0, 0)(0,0),而屏幕最左边的x轴坐标...
2019-10-18 21:11:53
530
1
原创 Assignments are not expressions,and only expressions are allowed in this context
今天在写Kotlin代码的时候,需要通过Kotlin从文件中读取数据并添加到StringBuffer里面去。之前用Java写代码的时候是这样的:StringBuilder body = new StringBuilder();String nextLine;while ((nextLine = bufferReader.readLine()) != null) { body.append...
2019-10-17 22:00:40
3484
2
转载 GLSL 中文手册
GLSL 中文手册基本类型:类型说明void空类型,即不返回任何值bool布尔类型 true,falseint带符号的整数 signed integerfloat带符号的浮点数 floating scalarvec2, vec3, vec4n维浮点数向量 n-component floating point vectorbvec2, ...
2019-10-17 20:55:59
1627
原创 OpenGL ES 2.0笔记1——简介
文章目录OpenGL是什么?OpenGL ES又是什么?简介应用场景Android对OpenGL ES 的支持版本的选择导入基本框架GLSrufaceViewGLSurfaceView.Renderer编写流程编写Activity编写RendererOpenGL是什么?OpenGL ES又是什么?简介OpenGL是一个跨平台的软件接口语言,用于调用硬件的2D、3D图形处理器。然而受限于现在...
2019-10-17 10:42:04
490
原创 Flutter入门并开发天气预报APP(8)——天气预报第二步-选择省、市、区界面及网络请求
文章目录1. 实现界面省市区2. 网络请求转为Dart类生成.g.dart文件网络请求3. UI异步更新省市区县项目Github地址:a1203991686/CoolWeather_Flutter在第六章中我们写了天气预报的页面, 但是你作为天气预报肯定能选择城市吧。所以我们现在来写选择省、市、区的界面。我们使用的是郭霖大神在第一行代码最后面酷欧天气的API。1. 实现界面既然是一个...
2019-10-14 16:53:21
1299
原创 Flutter入门并开发天气预报APP(7)——Http网络请求、Json转Dart实体类及异步更新UI
文章目录1. Flutter Http 网络请求1.1 HttpClient引入创建一个HttpClient:创建一个Uri根据uri获取返回数据读取内容最后关闭Client1.2 Dio引入示例2. Json转Dart手动生成Dart实体类将请求回来的Response转为Dart实体类3. 异步更新UI沙雕方法获取到数据设置一个空的实体类FutureBuilder示例相关Demo源码可见a1...
2019-10-12 22:12:19
1493
原创 Flutter入门并开发天气预报APP(6)——天气预报第一步-界面
文章目录1. 大致界面2. 创建项目3. 设计好天气详情页框架4. 设计title5. 设计下面天气预报页面当前温度和天气情况3天天气预报空气质量生活建议经过前面的对于Flutter的介绍,我们现在已经可以开始写我们的天气预报APP的界面了。1. 大致界面最终写成的大致界面如图:我们可以把这个界面拆分成如下部分:可以看到我们APP主要有最上面用来显示地点和刷新时间的Title、显示温...
2019-10-11 21:36:55
2380
2
原创 Flutter入门并开发天气预报APP(5)——SingleChildScrollView、ListView和GridView
文章目录1. SingleChildScrollView1.2 physics2. ListView2.1 ListView.builder2.2 ListView.separated3. GridView3.1 SliverGridDelegateWithFixedCrossAxisCount3.2 SliverGridDelegateWithMaxCrossAxisExtent3.3 Grid...
2019-10-10 22:13:38
1661
原创 Flutter入门并开发天气预报APP(4)——基础Widget
文章目录1. 基础组件1.1 文本1.2 按钮RaisedButtonFlatButtonIconButton1.3 图片从asset加载图片从网络加载图片参数2. 布局组件2.1 线性布局(Row、Column)2.2 弹性布局(Flex)Expanded2.3流式布局(Wrap、Flow)WrapFlow2.4层叠布局(Stack)2.5对齐与相对定位(Align)3. 容器类组件3.1 填充...
2019-10-10 20:23:40
728
原创 Flutter入门并开发天气预报APP(3)——Widget
文章目录1. 简介2. Widget的状态3. StatelessWidgetStatefulWidget1. 简介在Flutter中,Widget是个非常基本的东西,我在上一章就说过,Flutter中只要是界面都是Widget,你可以把它就理解成是控件,但是又和Android的View控件不同的是,在Flutter中,包括Padding、Align、手势检测的GestureDetector等...
2019-10-09 11:45:34
587
原创 Flutter入门并开发天气预报APP(2)——Flutter计数器Demo
文章目录1. 创建Flutter项目2. 介绍下AndroidStudio界面2.1 控制区![控制区](https://img-blog.csdnimg.cn/2019100910301619.png)2.2 Run运行区2.3 Flutter Outline/Flutter Inspector区3. Flutter项目结构4. main.dart文件4.1 import4.2 main()4....
2019-10-09 10:52:20
601
转载 Android网络请求1--HttpClient与HttpURLConnection
文章目录1. HttpClient2.1 导入HttpClient2.2 HttpClient的Get1.3 HttpClient的POST2. HttpURLConnection2.1 HttpURLConnection的POST请求在早期的时候,Android上还没有像Volley、OkHttp、Retrofit这些优秀的开源库,如果想要使用网络请求的话,就只能自己封装HttpClient和...
2019-10-09 10:18:21
243
原创 Flutter入门并实战天气预报APP(1)——Flutter安装
Flutter入门并实战天气预报APP(1)——Flutter安装文章目录Flutter入门并实战天气预报APP(1)——Flutter安装1. Flutter是什么2. 使用镜像安装2.1 首先你得确定你用的是什么shell2.2 如果你是bash2.3 如果你是zsh3. 下载Flutter SDK3.1 先去Flutter的官网去下载你对应系统的Flutter SDK3.2 解压安装包到你...
2019-10-08 20:07:14
814
原创 操作系统6--死锁
文章目录6.1 死锁的引入6.1.1 资源问题6.1.1.1 可重用性资源和消耗性资源可重用性资源可消耗性资源6.1.1.2 可抢占性资源和不可抢占性资源可抢占性资源不可抢占性资源6.1.2 死锁的起因6.1.2.1 竞争不可抢占性资源引起的死锁6.1.2.2 竞争可消耗资源引起的死锁6.2 死锁的定义、必要条件和处理方法6.2.1 死锁的定义6.2.2 产生死锁的必要条件6.2.3 处理死锁的办...
2019-09-19 22:50:39
220
原创 操作系统5--处理机调度
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598文章目录5.1 处理机调度的层次和调度算法的目标5.1.1 处理机调度的层次5.1.2 处理机调度算法的目标5.1.2.1 处理机调度算法的共同目标5.1.2.2 批处理系统的目标5.1.2.3 分时系统的目标5.1.2.4 实时系...
2019-08-12 15:27:59
481
原创 ijkPlayer编译-Android
1. 简介ijkplayer是哔哩哔哩的一个开源视频播放框架,支持Android、iOS。底层是ffplay。Github地址:bilibili/ijkplayer2. 编译方法由于通过Gradle编译起来很慢而且一旦失败又得重头来,所以这块就使用AndroidNDK的方式来编译。2.1 编译之前首先你得配置好等会编译需要的东西。这块我们都会使用Homebrew来安装git和yasm。...
2019-08-06 19:47:42
603
1
原创 Android网络请求4--解析Retrofit源码
文章目录1. Retrofit简介2. Retrofit用法(异步)2.1 添加依赖2.2 添加网络权限2.3 创建 接收服务器返回数据 的类2.4 创建 用于描述网络请求 的接口2.5 创建Retrofit实例2.6 创建网络请求接口实例2.7 发送网络请求2.8 处理返回数据3. Retrofit源码3.1 Retrofit对象构造源码3.1.1 步骤1:Retrofit类3.1.2 步骤2:...
2019-08-06 17:05:50
410
原创 操作系统4--进程的通信和线程
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598文章目录4.1 进程通信4.1.1 共享存储器系统4.1.2 管道通信系统4.1.3 消息传递系统4.1.4 客户机-服务器系统4.2 线程4.2.1 为什么要引入线程4.2.2 线程的概念4.2.3 线程的状态和线程控制块4.2....
2019-08-05 15:12:44
190
原创 uCrop框架用法和源码解析
本人能力不足,在看到源码最后一部分的时候大量抄袭可能是最详细的UCrop源码解析文章目录1. uCrop简介2. 使用方法2.1 导入依赖2.3 处理回来的数据2.4 uCrop高阶用法2.4.1 配置uCrop2.4.2 其他配置3. 源码解析3.1 第一部分:UCropActivity(整个框架的外在,用户操作图片的地方)3.2 第二部分:OverlayView(绘制裁剪框)3.2.1 ...
2019-08-04 17:33:17
6797
1
原创 操作系统3--进程的同步
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598文章目录3.1 进程同步3.1.1 同步概念3.1.1.1 进程同步的概念3.1.1.2 制约关系3.1.1.3 临界资源3.1.1.4 临界区3.1.1.5 同步机制应遵循的规则3.1.2 同步机制3.2.2.1 信号量机制1. ...
2019-07-31 10:56:15
219
原创 Android网络请求3--解析OkHttp源码
文章目录1. OkHttp简介2. 源码解析2.1 OkHttp请求流程2.1.1 从请求处理开始分析2.1.2 Dispatcher任务调度2.1.3 Interceptor拦截器2.1.3.1 getResponseWithInterceptorChain()方法2.1.3.2 Interceptor源码2.1.3.2.1 ConnectInterceptor2.1.3.2.2 CallSer...
2019-07-26 17:07:52
347
Android计算器 源码
2018-08-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人