自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Android | 彻底理解 View 的事件分发机制

不看一行代码,彻底理解 View 的事件分发机制。

2022-02-23 09:34:16 1695 2

原创 Android | 我写了一个支持圆角、描边的UI库

再见 Android,从此再无圆角!

2021-12-20 09:56:16 563

原创 Flutter:你真的会用 Row、Column 组件吗?

Flutter:Row、Column 组件优雅使用指南,回答如何正确的理解并使用他们,解答你心中长久的疑惑,一篇秒懂!

2021-04-28 21:13:06 497

原创 解决!输入 /** 回车,Kotlin 无法自动生成代码注释

最近在学习 Kotlin 代码,作为一个有追求的程序员,代码自然是少不了注释的。当我兴奋地敲完下面这个helloWorld程序,输入/**然后回车,准备为我的代码生成注释的时候,bug 出现了,Kotlin 代码在 IDEA 中无法按以上方式为代码自动生成注释。 /** fun helloWorld(bug: String){ println("Can not gen doc") }那怎么办呢,其实很简单,搜索BugKotlinDocument这个插件然后安装就

2021-04-25 14:43:09 698

原创 解决!Android Studio、IDEA安装Vim插件无法复制粘贴

事情的开始是这样的,作为一个 vim 的重度使用者,无论用哪个开发工具都喜欢装上 vim 插件。因为 vim 真的好用!但是开启 vim 插件后,想要将从网页复制的代码粘贴到 Android Studio 或者 IDEA ,Ctrl C 和 Ctrl V 快捷键就失效了。很不爽有木有?这是因为 vim 的快捷键和 Android Studio 或者 IDEA 的快捷键冲突了。打开 Setting 面板,搜索 vim 找到 Vim Emulation,如下图修改这两个快捷键,Handler 改为 IDE,

2021-04-25 11:45:15 1015 1

原创 第一行代码第三版实践与资源分享

这里简单记录下,第一行代码第三版最后一章的实践。实现 PermissionX 开源库对运行时权限的 API 封装并不是一件容易的事,因为这个操作是有特定的上下文依赖的。一般需要在 Activity 中接收 onRequestPermissionsResult() 方法的回调才行,所以不能那个简单地将整个操作封装到一个独立的类中。受此限制,也衍生出了一些特别的解决方案,比如将运行时权限的操作封装到 BaseActivity 中,或者提供一个透明的 Activity 来处理运行时权限等。Google 在

2021-03-17 22:08:26 436 1

原创 如何优雅的实现Android Ethernet 以太网的开启与关闭

My Blog: 基你太美Gitee: 基你实在是太美背景最近产品提了一个网络管理的需求,其中要求有以太网的开启/关闭功能。这里总结一下整个开发过程中遇到的坑。EthernetManager 不可用在 android.net 包下面其实有一个 EthernetManager 类负责以太网的管理,然而这个 Api 并没有对我们开放使用,官方标记为隐藏。自然这种方法是不适用的,遂弃之。/** * A class representing the IP configuration of the Et

2021-03-05 13:07:34 7153 2

原创 Android 如何优雅的实现控件计时功能

废话不多说,今天给大家推荐一个 Android 多组件同步计时的开源工具类 TimingX。TimingX 是一个用于 Android 多组件同步计时的一个工具类,使用 Handler 实现。在项目中我们经常有计时的需求,具体表现为从00:00开始计时,即分秒的格式。TimingX 是用于计时的,它目前不支持倒计时,不过如果你有这个需求也可以很容易的实现。项目地址Gitee:Timingx ,觉得用起来很爽的,请不要吝啬你的 Start 哦! 同样欢迎大家访问我的个人博客:Thatcher

2021-02-02 11:14:46 239 3

原创 按 back 键,按 home 键,Activity 的生命周期是如何变化的

按 back 键,按 home 键,Activity 的生命周期是如何变化的所有 Activity 都销毁了,那么应用进程也销毁了吗?MainActivity 和 NetworkActivity。点击进入 MainActivity。MainActivity: onCreateMainActivity: onStartMainActivity: onResume从 MainActivity 点击进入 NetworkActivity。MainActivity: onPauseNetwork.

2020-10-14 20:06:30 1217 3

原创 最易懂的 BitSet 详解

文章目录成员变量构造函数常用的函数set本文基于 JDK 1.8 来分析 Java 中 BitSet 的实现原理。成员变量BitSet 的作用是用每一个比特位(bit)来标记元素是否出现的,成员变量 words 是个 long 类型的数组,在 Java 中,long 类型的元素占 8 个字节(byte),一个字节占用 8 个 比特位。那么 words 数组中每一个元素可以标记 64 个值,假设数组长度为 L,那么整个 BitSet 可以标记的值数量就是 64*L。private final stat

2020-10-08 21:09:36 1137

原创 二叉树的前序、中序、后序非递归遍历

二叉树的遍历方法是以打印根节点的顺序来命名的。先打印根节点就叫做前序遍历,先打印左结点后打印根节点就叫做中序遍历,最后打印根节点就叫做后序遍历。以下面一颗二叉树为例,本文分析这颗二叉树前序、中序、后序非递归遍历的方法。虽然这三种遍历的策略不一样,但是遍历二叉树本质上就是递归,而递归在计算机内部就是不停的压栈,保留现场。所以我们能够很容易的想到用栈这种结构实现非递归遍历。上图给出了非递归前序遍历的过程。前序遍历前序遍历就是对每个节点按照"根左右"的顺序进行遍历。本质上是一种递归,由于每个节点的遍历策略

2020-09-28 11:46:51 366

原创 Java 类文件结构

Class 文件格式采用一种类似于 C 语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号数和表。无符号数属于基本的数据类型,以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节、8 个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照 UTF-8 编码构成字符串值。表是由多个无符号数或者其他表数据作为数据项构成的复合数据类型,所有表习惯地以 “_info” 结尾。表用于描述有层次关系的复合结构的数据,整个 Class 文件本质上就是一张表。Clas

2020-09-28 11:45:02 100

原创 Java 装箱拆箱

什么是装箱拆箱Java中基本数据类型与它们的包装类进行运算时,编译器会自动帮我们进行转换,转换过程对程序员是透明的,这就是装箱和拆箱,装箱和拆箱可以让我们的代码更简洁易懂。Java中基础数据类型与它们对应的包装类见下表(共8种):原始类型包装类型字节数booleanBoolean没有精确定义byteByte1 BytecharCharacter2 BytefloatFloat4 ByteintInteger4 BytelongL

2020-09-28 11:43:29 105

原创 Activity 的工作过程

下图是 Activity 的启动流程时序图,调用过程比较复杂,图片建议放大后查看。Android 9 及其以后 Activity 的启动过程有变化,主要体现在 realStartActivityLocked 方法。将启动一个 Activity 看做是执行一次事务。当调用 startActivity 那一刻开始,就进行了很深层次的方法调用,不过最终调用还是会回到 ActivityThread,H 是 ActivityThread 的一个内部类,它继承了 Handler,启动一个 Activity 就是用

2020-09-28 11:38:11 162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除