5 leilifengxingmw

尚未进行身份认证

我要认证

生活有诗和远方,还有她。

等级
TA的排名 2w+

Android 混合模式之 PorterDuffXfermode

注意:在使用PorterDuffXfermode的时候,目标图像(DST)和图像(SRC)混合的操作要在一个新的图层上进行,否则当前的Canvas上的像素会影响混合操作。@Overrideprotected void onDraw(Canvas canvas) { //创建一个新的图层 int layerId = canvas.saveLayer(new RectF(), n...

2020-06-22 09:27:19

Kotlin协程实现原理

为什么需要协程?协程可以简化异步编程,可以顺序地表达程序,协程也提供了一种避免阻塞线程并用更廉价、更可控的操作替代线程阻塞的方法 – 挂起函数。Kotlin 的协程是依靠编译器实现的, 并不需要操作系统和硬件的支持。编译器为了让开发者编写代码更简单方便, 提供了一些关键字(例如suspend), 并在内部自动生成了一些支持型的代码。实现细节Continuation passing styl...

2019-12-08 12:36:17

Java AbstractQueuedSynchronizer(AQS)浅析之一

本篇文章对Java中的AbstractQueuedSynchronizer(AQS)进行分析和学习。若有不正之处请多多谅解,并欢迎批评指正。为叙述方便,下文都以AQS替代AbstractQueuedSynchronizer。使用的Java版本src git:(master) ✗ java -version java version "1.8.0_201"Java(TM) SE Runti...

2019-11-12 08:52:06

Java synchronized 关键字实现原理

使用的java版本src git:(master) ✗ java -version java version "1.8.0_201"Java(TM) SE Runtime Environment (build 1.8.0_201-b09)Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)先说结论:对于同...

2019-11-02 17:35:30

Git 使用cherry-pick摘取提交

以前很少使用cherry-pick这个命令,今天研究了一下如何使用cherry-pick摘取提交,便记录一下以便后续查阅。初始git历史如下图所示。现在我们在master分支上开始测试cherry-pick这个提交点上,这个提交点上的commit id是674d60f。cherry-pick 摘取一个提交点git cherry-pick <commit-id>比如说我们现...

2019-11-01 09:15:40

Git重置某些文件到指定版本

简书同步发布 Git重置某些文件到指定版本开始提交历史如下图所示,我是使用source tree 来查看提交历史的。我的目的是将v3版本的 MainActivity.java 和 SecondActivity.kt 重置到v1版本。v1版本MainActivity.java private void mainV1(){ }SecondActivity.kt ...

2019-10-22 23:26:30

getDimension()、getDimensionPixelSize()、getDimenPixelOffset()

简书同步发布简书链接:getDimension()、getDimensionPixelSize()、getDimenPixelOffset()我们在自定义View的时候,通常会指定自定义View的字体大小,然后我们获取字体大小的时候,可以有三个方法供选择。getDimension()getDimensionPixelSize()getDimenPixelOffset()这三个方法的...

2019-09-26 22:31:35

Java反转单链表

/** * <p> * Desc:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 * <p> * 测试用例 * 1. head 为null * 2. 只有一个节点 * 3. 正常的链表 * <p> */public static class ListNode { int value; ...

2019-09-22 13:56:13

Java实现快速排序算法

快速排序快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为:从数列中挑出一个元素,称为"基准"(pivot),重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。递...

2019-09-22 12:45:03

Android Handler

Handler 实例化–>发送消息–>到处理消息流程。1:Handler 实例化在主线程中实例化 //在主线程创建Handler对象 private Handler handlerMain = new Handler() { @Override public void handleMessage(Message msg) { /

2019-07-27 23:48:00

Android View ViewGroup 的measure过程

首先扯点别的:“光阴似箭,日月如梭”,这句话小学就知道了,随着年龄的增长,越来越觉得如此,人生如白驹过隙。毕业工作快一年了,但是感觉自己Android方面的基础知识还是不扎实,所以看看开发艺术探索,巩固提高自己。View 的measure过程:measure 过程决定了View的宽和高。measure完成以后,就可以通过getMeasuredWidth和getMeasuredHeight来获取...

2019-07-11 22:50:14

菜鸟看源码之HashMap

先扯点别的:听说拳皇97界的大魔王老K退役了,不知道以后还能不能见到那么犀利的大门。最近感觉自己的拳皇水平有点提升,应该能排到100多线的水平吧。今天记录一下看HashMap源码的过程,感觉HashMap的源码要比ArrayList难一点。所以只看主要流程,不可能每一行代码都搞懂什么意思。先看一下HashMap的继承结构图 HashMap:它根据键的hashCode值存储数据,大多数...

2019-06-23 23:27:19

Android Context继承结构图

好久没在csdn些博客了,哈哈。

2019-06-16 18:47:04

Android Studio 简单生成so文件并调用

平台:windows IDE :Android Studio 下载好ndk:下载地址 https://developer.android.com/ndk/downloads/index.html第1步:新建一个Android Studio 工程 JniHelloWorld。新建一个MyJni.java文件。 MyJni.javapublic class MyJni

2019-03-31 23:08:24

菜鸟看源码之AsyncTask

首先扯点别的:今天是第二天上班,看了看日历已经是2月23号了,2018年还剩9个多月。真是感觉人生如白驹过隙啊。今年自己竟然不知不觉已经26周岁了,趁着还算比较年轻(再过个3,4年这话就不好说了),努力奋斗!今天梳理一下AsyncTask的源码这部分文字叙述摘抄自郭霖老师的博客 Android AsyncTask完全解析,带你从源码的角度彻底理解 先看基本的使用方法:由于AsyncTas...

2019-02-14 09:20:47

ThreadPoolExecutor是怎样执行任务的

先扯点别的:最近被公司外派到了嘉定区,新租了一个房子,马马虎虎,每天走路上班大约30分钟。早上8点半上班,下午5点半下班,和以前的作息规律有点不一样,逐渐适应,调整,然后还得把跑步这项运动坚持下来。这篇文章(一天写不完)探索一下Java中的ThreadPoolExecutor的使用,感觉还是挺重要的。如果出去面试能把这个讲清楚,估计能唬住不少面试官,哈哈。 先给出一个简单的使用示例,然后再探...

2018-03-16 23:06:59

菜鸟看源码之LinkedBlockingQueue

首先扯点别的:已经不记得上次是什么时候做仰卧起坐的了,现在重新开始锻炼起来,腹肌还是得保持的。但是刚做了两天就感觉小腹酸疼。做20个都得咬牙坚持。明天继续做。今天分析一下LinkedBlockingQueue的源码。LinkedBlockingQueue 是基于链表的阻塞队列,按照先进先出的顺序来排列元素。默认长度可以达到Integer.MAX_VALUE 。也可以指定LinkedBlocki...

2018-03-15 21:45:48

FastJson在Android中的使用

以前都是使用Gson,从来没使用过FastJson。今天偶尔在一个项目中看到,就简单了解一下。 先交代使用到的两个类User类public class User { private Long id; private String address; public Long getId() { return id; } publi...

2018-03-07 22:16:14

菜鸟看源码之ArrayDeque

先扯点别的:今天上海风不小,现在窗外依然是狂风呜咽,不禁让人想起山科的风。今天分析一下ArrayDeque的源码ArrayDeque的继承关系图 ArrayDeque实现了Deque接口,内部使用一个可调整大小的数组来存放元素。数组没有容量限制,必要的时候数组的容量会增加。ArrayDeque不是线程安全的。不允许添加Null元素。当ArrayDeque 作为一个栈来使用的时候,Ar...

2018-02-27 23:00:02

Fragment 懒加载

首先扯点别的:今天买回家的火车票,12306还是没让我失望,果断没有抢到。先买了一个飞机票,然后等着抢明天的火车票,如果抢到了就把飞机票退了,不然就得坐飞机了。今天记录一下 Fragment 懒加载关于Fragment的懒加载有以下两点先声明一下:1.Fragment 的 setUserVisibleHint方法, 只有 Fragment 在 ViewPager 里才会被调用//如

2018-01-15 22:21:57

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。