7 RalfNick

尚未进行身份认证

做最好的自己!

等级
TA的排名 8w+

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

上一篇 事件分发—初体验文章中实现了一个能够滑动关闭的 Demo,主要来体验一下事件分发,这篇来对 View 的事件分发做一下规律总结,包括【单一 View】,【单一 ViewGroup(不含子 View)】,【ViewGroup + View】,【ViewGroup + ViewGroup】。1. 事件分发总览当用户点击屏幕产生一个动作,这个动作通过底层硬件来捕获,然后交给 ViewRoot...

2019-09-15 14:52:44

事件分发—初体验

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

2019-09-08 21:17:28

并发学习之 - ReentrantLock

synchronized 和 ReentrantLock上一篇文章 并发学习之 - synchronized 中我们讲解了如何使用关键字 synchronized 来实现同步访问。从 Java 5 之后,JDK 提供了另外一种方式来实现同步访问,那就是 ReentrantLock。ReentrantLock 增加了一些高级功能,主要是这 3 项:等待可中断、可实现公平锁,以及锁可以绑定多个条件。...

2019-08-20 11:10:06

并发学习之 - synchronized

上一篇文章 并发基础知识扫盲 讲了一些 java 中 并发相关的基础性的东西,这篇来了解下同步中常使用的关键字 synchronized。synchronized 关键字是随着 Java 的诞生就有的的,它对于开发者来说,使用起来非常方便,无需关心底层的复杂实现。但是在使用过程中开发者往往担心 synchronized 带来的性能问题,认为它太重了,获得锁和释放锁的确会带来性能上的消耗。在 Ja...

2019-08-04 22:32:00

并发基础知识扫盲

1. 进程和线程提到并发,首先需要了解下进程和线程。1.1 进程进程,可以理解为就是一个应用程序,如当我们听音乐时,开启的程序就是一个进程;当我们听着音乐,写着代码,这个时候就开启了两个程序,有两个进程在运行。此时,相当于 CPU 在同时处理两个任务,属于并发,对用户来说,两个进程就像在同时运行一样。现代的多核处理器,确实可以做到多个进程并行。一个进程开启,操作系统会为这个进程分配独立的资源...

2019-07-22 00:25:22

Serializable 和 Parcelable

1.序列化和反序列化序列化(Serialization)是将对象的状态信息转化为可以存储或者传输形式的过程,一般将一个对象存储到一个储存媒介,例如档案或记忆体缓冲等,在网络传输过程中,可以是字节或者 XML 等格式;而字节或者 XML 格式,可以还原成完全相等的对象,这个相反的过程又称为反序列化。2.序列化的作用通常完成序列化是由于以下三方面的需要:永久性保存对象,保存对象的字节序列...

2019-07-14 17:48:27

AsyncTask 源码分析

AsyncTask 简介在 Android 中执行耗时任务时,我们一般不直接自己 new 一个 Thread,而且在 Android Studio 中也会给出提示,不建议使用传统的 Thread,那么有哪些方式呢?HandlerThread 是一个 Thread,内部使用 Handler,它与普通 Thread 的区别是通过 handler 向消息队列中添加消息,优势是可以利用 Mess...

2019-07-01 08:33:35

okhttp3 源码分析

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

2019-06-23 23:48:11

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

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

2019-06-10 17:39:34

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

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

2019-06-07 14:29:05

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

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

2019-06-07 09:50:24

Android Studio 中通过 CMake 方式使用 JNI

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

2019-06-07 09:39:36

EventBus 使用及源码分析

EventBus 是我们日常开发中使用很频繁的一个三方库,原因很简单,使用 EventBus 可以很容实现解耦,不需要设置很多回调接口,如在 Fragment 和 Activity 之间的通讯,不同 Activity 之间、不同的线程之间,不同的 Service 之间等,使用 EventBus 会减少很多代码,而且看起来更加简洁,在 Android Studio 中点击左侧的小安卓图标可以很方便从...

2019-05-26 17:58:50

属性动画详解

1. 动画分类Android 中动画分为 3 种:View 动画(视图动画)、帧动画、属性动画。(1)帧动画:将一系列的图片按照顺序播放,每一张图片就是动画中的一帧,连续播放后就形成了动画,使用起来比较简单,缺点是当图片过多或者过大时,容易导致 OOM。(2)View 动画:动画变化分为 4 种,平移、缩放、旋转、透明度,通过这 4 种动画其中的一种变换或者组合变换,使视图完成一种渐进式的动...

2019-05-04 16:08:28

数据库学习之 greenDAO 源码分析

概述greenDAO 主要使用起来方便的地方,就是使用 @Entity 注解实体类后,只需要build工程,DaoMaster、DaoSession和对应的 Dao 文件就会自动生成,所以对于 greenDAO 来说,需要分析的主要就是 DaoMaster、DaoSession 和 xxDAO 这几部分。DaoMaster:使用 greenDAO 的切入点。 DaoMaster 保存数据库对...

2019-04-29 22:44:23

自定义 View - onDraw 过程详解

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

2019-04-21 23:51:24

自定义 View - layout 过程详解

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

2019-04-13 08:34:16

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

1. 二叉堆定义(1)堆是一个完全二叉树(2)堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。第一点,堆必须是一个完全二叉树。,除最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列。第二点,堆中的每个节点的值必须大于等于(或者小于等于)其子树中每个节点的值。也可以理解为,堆中每个节点的值都大于等于(或者小于等于)其左右子节点的值。这里我们借助于堆这种数...

2019-04-10 20:32:41

自定义 View - Measure 详解

上图就是 View 绘制的主要过程,View 的绘制是从顶层的 DecoraView – ViewGroup(可能多个 ViewGroup)再到 View,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。其中 Measure 过程是相对复杂的一个,但是其实我们梳理出来需要掌握测量过程的知识点,就很清楚了,下面就来一起看看 Measure 过程。Meas...

2019-04-07 22:58:21

自定义 View - Canvas 详解

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

2019-04-03 20:36:38

查看更多

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