自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 View 事件分发规律总结(超详细)

上一篇 事件分发—初体验文章中实现了一个能够滑动关闭的 Demo,主要来体验一下事件分发,这篇来对 View 的事件分发做一下规律总结,包括【单一 View】,【单一 ViewGroup(不含子 View)】,【ViewGroup + View】,【ViewGroup + ViewGroup】。 ...

2019-09-15 14:56:42

阅读数 20

评论数 0

原创 事件分发—初体验

1.View 事件分发初体验 View 事件在 Android 中也是很重要的一块,通过对事件的处理可以完成一系列的交互操作,使界面有更好的交互效果,本篇文章就来体验一下事件处理带来的效果,本文不会重点分析事件分发的过程以及原理,主要通过本文先来对事件的分发有一个初步的概念,后面的文章会单独总结事...

2019-09-08 21:18:45

阅读数 38

评论数 0

原创 并发学习之 - ReentrantLock

synchronized 和 ReentrantLock 上一篇文章 并发学习之 - synchronized 中我们讲解了如何使用关键字 synchronized 来实现同步访问。从 Java 5 之后,JDK 提供了另外一种方式来实现同步访问,那就是 ReentrantLock。Reentra...

2019-08-20 11:10:06

阅读数 17

评论数 0

原创 并发学习之 - synchronized

上一篇文章 并发基础知识扫盲 讲了一些 java 中 并发相关的基础性的东西,这篇来了解下同步中常使用的关键字 synchronized。 synchronized 关键字是随着 Java 的诞生就有的的,它对于开发者来说,使用起来非常方便,无需关心底层的复杂实现。但是在使用过程中开发者往往担心 ...

2019-08-04 22:32:00

阅读数 17

评论数 0

原创 并发基础知识扫盲

1. 进程和线程 提到并发,首先需要了解下进程和线程。 1.1 进程 进程,可以理解为就是一个应用程序,如当我们听音乐时,开启的程序就是一个进程;当我们听着音乐,写着代码,这个时候就开启了两个程序,有两个进程在运行。此时,相当于 CPU 在同时处理两个任务,属于并发,对用户来说,两个进程就像在同时...

2019-07-22 00:25:22

阅读数 37

评论数 0

原创 Serializable 和 Parcelable

1.序列化和反序列化 序列化(Serialization)是将对象的状态信息转化为可以存储或者传输形式的过程,一般将一个对象存储到一个储存媒介,例如档案或记忆体缓冲等,在网络传输过程中,可以是字节或者 XML 等格式;而字节或者 XML 格式,可以还原成完全相等的对象,这个相反的过程又称为反序列化...

2019-07-14 17:48:27

阅读数 27

评论数 0

原创 AsyncTask 源码分析

AsyncTask 简介 在 Android 中执行耗时任务时,我们一般不直接自己 new 一个 Thread,而且在 Android Studio 中也会给出提示,不建议使用传统的 Thread,那么有哪些方式呢? HandlerThread 是一个 Thread,内部使用 Handler...

2019-07-01 08:33:35

阅读数 29

评论数 0

原创 okhttp3 源码分析

在上一篇 Retrofit 学习第三弹—源码分析篇 分析了 Retrofit 的源码,分析到请求 Call 位置,是调用的 okhttp3 中的 OkHttpClient 来完成请求的,所以 Retrofit 是基于 okhttp3 的一个封装,通过注解来设定参数构造出 Request,然后通过 ...

2019-06-23 23:48:11

阅读数 48

评论数 0

原创 [Retrofit 学习第三弹——源码分析篇

Retrofit 是目前作为网络请求的主流框架,使用起来很方便,仅需在接口中定义方法,打上注解,而且和 Rxjava 配合起来,可以更好的完成网络请求时的线程切换问题。那么这样一个框架,我们有必要对它的源码分析一下,希望能够从中吸取到一定的东西,Retrofit 框架里面用到了很设多计模式,像外观...

2019-06-10 17:39:34

阅读数 64

评论数 0

原创 Android 布局中分割线创建的三种方式

在android中创建布局时,发现有些控件之间加一些分割线,会很美观,上网搜索了下,找到了三种方式创建分割线,下面就来分别来试一下。 1. 使用View 也是最简单的一种方式,直接定义宽度和高度,设置颜色即可。 但是,分割线较多的布局中,这种不太适合,会占用较多内存 <View andr...

2019-06-07 14:29:05

阅读数 689

评论数 1

原创 NDK开发学习笔记之javah及ndk-build

NDK开发学习笔记之JNI环境搭建 写到 NDK 的基本使用及环境搭建。 并写了一个简单的 cpp 文件,但是有没有发现在编写 cpp 文件中的函数时,名字是不是很长,很容易写错! 那么,哟没有方法,自动生成函数名呢?没错,你猜对了,还真有这样的工具—— javah。下面就来介绍 javah 的...

2019-06-07 09:50:24

阅读数 40

评论数 0

原创 Android Studio 中通过 CMake 方式使用 JNI

在 AS 中使用 Eclipse 中的方式构建 jni 环境,这种方式配置起来稍有麻烦,在 AS 中还有另外一种方式可以使用:即 CMake 方式。 一、说点题外话: 2015年6月26日,Android产品经理在Android官网发表博客 1、2015年底停止对eclipse的adt更新支持,后...

2019-06-07 09:39:36

阅读数 108

评论数 0

原创 EventBus 使用及源码分析

EventBus 是我们日常开发中使用很频繁的一个三方库,原因很简单,使用 EventBus 可以很容实现解耦,不需要设置很多回调接口,如在 Fragment 和 Activity 之间的通讯,不同 Activity 之间、不同的线程之间,不同的 Service 之间等,使用 EventBus 会...

2019-05-26 17:58:50

阅读数 42

评论数 0

原创 属性动画详解

1. 动画分类 Android 中动画分为 3 种:View 动画(视图动画)、帧动画、属性动画。 (1)帧动画:将一系列的图片按照顺序播放,每一张图片就是动画中的一帧,连续播放后就形成了动画,使用起来比较简单,缺点是当图片过多或者过大时,容易导致 OOM。 (2)View 动画:动画变化分为 4...

2019-05-04 16:08:28

阅读数 95

评论数 0

原创 数据库学习之 greenDAO 源码分析

概述 greenDAO 主要使用起来方便的地方,就是使用 @Entity 注解实体类后,只需要build工程,DaoMaster、DaoSession和对应的 Dao 文件就会自动生成,所以对于 greenDAO 来说,需要分析的主要就是 DaoMaster、DaoSession 和 xxDAO ...

2019-04-29 22:44:23

阅读数 1487

评论数 0

原创 自定义 View - onDraw 过程详解

之前两篇文章分析了 onMeasure 过程和 onLayout 过程,不熟悉的童鞋可以回头去复习下,本篇文章来分析绘制过程的最后一个 onDraw 过程。这个过程的绘制使用到的 Paint 和 Canvas 在之前也有讲解到,在本篇的练习代码中有使用到,不会具体讲解这些知识点,不熟悉的话可以看看...

2019-04-21 23:51:24

阅读数 109

评论数 0

原创 自定义 View - layout 过程详解

在上一篇文章 自定义 View - Measure 详解 中讲了 View 的 Measure 过程,还不熟悉的童鞋可以翻过去看看。View 的 3 个过程是按照顺序执行的: measure --> layout --> draw 测量(measure)过程是确定这个 View 的大小...

2019-04-13 08:34:16

阅读数 46

评论数 0

原创 数据结构与算法学习-二叉堆及堆排序

1. 二叉堆定义 (1)堆是一个完全二叉树 (2)堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。 第一点,堆必须是一个完全二叉树。,除最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列。 第二点,堆中的每个节点的值必须大于等于(或者小于等于)其子树中每个节点的...

2019-04-10 20:32:41

阅读数 171

评论数 0

原创 自定义 View - Measure 详解

上图就是 View 绘制的主要过程,View 的绘制是从顶层的 DecoraView – ViewGroup(可能多个 ViewGroup)再到 View,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。其中 Measure 过程是相对复杂的一个,但是其实...

2019-04-07 22:58:21

阅读数 60

评论数 0

原创 自定义 View - Canvas 详解

1.Canvas Canvas 是我们绘制各种图形或文字时主要的操作对象,因为绘制绘制过程调用的都是它的 drawXX 方法。官方给出的 Canvas 的解释: The Canvas class holds the “draw” calls. To draw something, you nee...

2019-04-03 20:36:38

阅读数 116

评论数 0

原创 异步线程之 HandlerThread 和 IntentService

本篇主要讲解一下 HandlerThread 和 IntentService,其中 IntentService 内部使用了 HandlerThread,而 HandlerThread 是一个 Thread,内部使用到了 Handler 消息机制,对 Handler 消息机制还不熟悉的话,可以看看之...

2019-03-24 11:45:32

阅读数 54

评论数 0

原创 数据结构与算法学习-二分查找及其变形

二分查找 1、二分查找针对的是一个有序集合,查找思想主要采用分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素。要查找的元素比中间的元素小,则将范围缩小为集合的前半部分,如果待查找的元素比中间的元素大,则将将范围缩小为集合的后半部分,然后重复这个过程,直...

2019-03-22 18:59:43

阅读数 38

评论数 0

原创 数据结构与算法学习-排序算法(二)

很早之前整理过一篇**排序算法**,这次又整理了一下,增加了计数排序、归并排序和桶排序,需要的拿走不谢! 各种排序算法实现 public class Sort { /** * 交换数组中两个位置的数值 * * @param arr * @param...

2019-03-22 18:39:04

阅读数 63

评论数 0

原创 数据结构与算法学习-二叉查找树

之前整理了两篇关于二叉树的文章: 征战二叉树-第一站 征战二叉树-第二站 这两篇都是基于二叉树,以及一些练习题,本篇主要对二叉查找树做一个实现,即增删改查,实际上二叉查找树也很容易理解,满足的条件就是左子节点的值小于根节点,右子节点的值大于根节点。 代码实现 public class Binary...

2019-03-21 11:20:56

阅读数 45

评论数 0

原创 深入理解 Handler 消息机制

上一篇 - 消息机制 Handler 使用 文章讲了 Handler 的一个概述和基本的使用方法,这里还有一点需要强调一下:对于初学者一定要将你创建的子线程区分开,Handler 是你在子线程执行完,准备进行线程切换执行其他操作时才开始使用 Handler 本篇主要对 Handler 的工作原理进...

2019-03-18 00:06:12

阅读数 54

评论数 0

原创 动画还可以这么玩?使用 Toast 显示 or Dialog 显示

本篇不是讲解动画的设计,而是分析动画在使用过程中,如何合理显示遇到的一些坑,主要是由于特定场景引起的。 问题 相信大家都见过这样的点赞动画,点赞之后图片能够飘一会。 思路:动画其实并不难,通过一个自定义 View,大小为显示动画的范围,通过一个 ImageView显示图片,然后通过动画根据设计的路...

2019-03-10 18:22:23

阅读数 69

评论数 0

原创 消息机制 - Handler 使用

消息机制 提到消息机制,很快想到 Handler,没错,Android 的消息机制主要就是 Handler 的运行机制,另外也不能缺少 Looper 和 MessageQueue。很多人认为 Handler 的作用是用来更新 UI 操作的,多数情况下, Handler 的确用来更新 UI,由于 A...

2019-03-03 20:53:33

阅读数 56

评论数 0

原创 自定义View 实战一 - 轻松显示星级

需求 前面几篇文章主要都是在介绍一些自定义 View 的基础知识,本篇就来一起编写一个小 Demo,来感受感受。 自定义 View 的编写,来源于产品的无理需求,有了需求,首先是要看现有的控件能否满足需求,或者控件的组合能否满足,现有的控件满足的话,就不必去造一个轮子,费时费力。再有,考虑产品的开...

2019-02-24 16:39:39

阅读数 117

评论数 0

原创 自定义 View - Paint 详解

上一篇 文章对自定义单一 View 进行了初步的介绍,对绘制的流程有了一个概念,本篇将对 Paint 部分进行详细 的介绍。 上一篇中给出一张图,自定义 View 部分设计的知识点,对于 Paint 部分,也是很大的一块,Paint 的 API 很多,有各种样式,各种效果,颜色设置,抗锯齿,文字...

2019-02-18 00:00:45

阅读数 79

评论数 0

原创 LRU简单实现-了解一下?

LRU 算法 LRU 是一种作为缓存的算法,像 CPU 缓存,数据库缓存,浏览器缓存。以及在移动端开发时的图片安缓存,采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法,常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策...

2019-01-22 23:21:13

阅读数 140

评论数 0

原创 数据结构与算法学习-双向链表

双向链表 在上一篇单链表中已经提到了双向链表,其实单链表实现时候,双向链表相对容易多了,只不过对每个节点多了一个前驱节点链接,遍历可以前向遍历,也可以后向遍历。 在添加节点和删除节点时,需要注意,因为需要维护节点和前驱链和后继链,所以在添加时,先完成新节点的前向链和后向链,然后再修改新节点的前驱节...

2019-01-16 23:46:04

阅读数 70

评论数 0

原创 数据结构与算法学习-单链表

一、什么是链表? 1.和数组一样,链表也是一种线性表。 2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。 3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。 二、为什么使...

2019-01-01 19:54:45

阅读数 52

评论数 0

原创 自定义View-初体验

本篇主要面向初学者,已熟悉自定义 View 的童鞋可以飘过了。 自定义 View 很难么? 刚学习安卓不久后,也会关注一下高级开发需要的技能, 基本上都是要求会自定义View,当时还不知道自定义View是啥,就是觉得很高大上的东西。直到现在,算是有了一点理解。也是看了很多的文章,因为这部分涉及的东...

2018-12-23 11:35:03

阅读数 56

评论数 0

原创 数据结构与算法学习-队列

1.简介 队列(Queue),是一种先进先出的数据结构,First In First Out(FIFO),可以想象一下,就像是在排队买票,后来的人只能排在对尾,先来的人可以先买票(在对头,可以执行出去的操作)。 队列支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从...

2018-12-20 00:06:50

阅读数 52

评论数 0

原创 数据结构与算法学习-栈

1. 栈的特性 栈这个数据结构相对简单,它是一种“先进后出”(First In Last Out,FILO)的数据结构,即操作数据的进出只能在一端进行,所以从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、...

2018-12-09 21:40:21

阅读数 69

评论数 0

原创 自定义 View - 基础

先扯一点题外话,就现在的 Android 市场来说,可以说是不容乐观的,只不过是相对的,Android 的坑位有限,人又相对比较多,加上资本寒冬,像我一样的菜鸟是最为令人担忧的。那么能怎么办呢?只有进阶到高级才行,才能混的下去,高级 Android 工程师的市场还是很广阔的,所以一起努力吧,少年们...

2018-12-09 19:18:06

阅读数 401

评论数 1

原创 数据结构与算法学习-复杂度分析

本篇主要记录一下在学习数据结构与算法的过程中,关于复杂度的一些理论部分,了解这些概念和方法后,主要就是通过大 O 法来得到复杂度,对算法有一个很好的评估! 一、什么是复杂度分析? 1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。 2.因此需从执行时间和占用空间两个维度来评估数...

2018-11-29 11:29:34

阅读数 42

评论数 0

原创 数据结构与算法学习-数组练习

上一篇 数据结构与算法学习-数组 简单实现了一下 ArrayList,对 List 的增删改查有了一定的认识,这一部分,来练习一下一些简单小算法,可以使用我们自己实现的 ArrayList,顺便检查下哪里写的不好。 下面就直接给出算法,具体的逻辑不讲解,都是相对比较基础的算法题,花一点时间相信大家...

2018-11-29 11:28:38

阅读数 107

评论数 0

原创 数据结构与算法学习-数组

1. 概念 学习数据结构一般都是从数组开始,以为相对来说简单,而且也最常用。 数组是我们在编程中最常用的数据结构,它是线性的数据结构,即在内存中是连续的,所以可以很方便的进行遍历,只要有首地址,就可以根据角标计算出所要拿到的元素的地址: arr[i] = arr[0] + K * i; K是一个...

2018-11-29 11:27:20

阅读数 32

评论数 0

原创 一篇文章介绍完 Drawable

1. Drawable 简介 Drawable 在 Android 开发中是非常常用的,比如在 XML 中定义color,shape,selector 等。通过 Drawable 的使用,能够帮助我们实现一些比较好的界面效果,同时 Drawable 又相对轻量级,不像自定义 View 那样复杂。使...

2018-11-11 20:35:01

阅读数 457

评论数 0

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