自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 反思|官方也无力回天?Android SharedPreferences的设计与实现

反思|官方也无力回天?Android SharedPreferences的设计与实现 反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。 起源 就在前几日,有幸拜读到 HiDhl 的文章,继腾讯开源类似功能的MMKV之后,Google官方维护的 Jetpack Data...

2020-10-17 16:36:37 7048 2

原创 反思|Android 输入系统 & ANR机制的设计与实现
原力计划

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。 概述 对于Android开发者而言,ANR是一个老生常谈的问题,站在面试者的角度,似乎说出 「不要在主线程做耗时操作」 就算合格了。 但是,ANR机制到底是什么,其背后的原理究竟如何,为什么要设计出这样的机制?这些问题时...

2020-08-24 22:14:25 1696 0

原创 反思|Android源码模块化管理工具Repo分析
原力计划

「反思」 系列是笔者对于 学习归纳 一种新的尝试,其起源与目录请参考 这里 。 起源 随着Android项目 模块化 或 插件化 项目业务的愈发复杂,开发流程中通过版本控制工具(比如Git)管理项目的成本越来越高。 以大名鼎鼎的 Android源代码开源项目 (Android Open-Sour...

2020-05-05 16:10:17 919 0

原创 反思|Android 事件拦截机制的设计与实现
原力计划

「反思」 系列是笔者一个新的尝试,其起源与目录请参考 这里 。 概述 完整的掌握 Android 事件分发体系并非易事,其整个流程涉及到了 系统启动流程(SystemServer)、输入管理(InputManager)、系统服务和UI的通信(ViewRootImpl + Window + Win...

2020-04-15 23:37:00 1198 1

原创 哈希映射用法及算法例题

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。 用法 哈希映射 是用于存储 (key, value) 键值对的一种实现。 使用哈希映射的第一个场景是,我们 需要更多的信息,而不仅仅是键。然后通过哈希映射 建立密钥与信息之间的映射关系。...

2020-03-09 01:06:01 6200 1

原创 哈希集合用法及算法例题

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。 用法 哈希集 是集合的实现之一,它是一种存储 不重复值 的数据结构。 因此,通常,使用哈希集来检查该值是否已经出现过。 让我们来看一个例子: 给定一个整数数组,查找数组是否包含任何重复...

2020-03-09 01:05:19 1121 0

原创 哈希表原理及简单设计

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。 介绍 哈希表 是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。 有两种不同类型的哈希表:哈希集合 和 哈希映射。 哈希集合是 集合 数据结构的实现之一,用于存储 非重复值。...

2020-03-09 01:04:44 855 0

原创 运用递归解决二叉树相关问题

在之前的章节中,我们已经介绍了如何解决树的遍历问题。我们也已经尝试过使用递归解决树的为 前序遍历 、 中序遍历 和 后序遍历 问题。 事实上,递归 是解决树相关问题的最有效和最常用的方法之一。本节中,我们将会介绍两种典型的递归方法。 解决方案 本小节内容节选自 LeetCode:运用递归解决树的...

2020-03-04 00:30:19 459 0

原创 二叉树的递归与迭代遍历

二叉树的递归与迭代遍历 本文将针对二叉树中几种常见的遍历方法进行介绍。 遍历方式 前序遍历 前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。 中序遍历 中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。 后序遍历 后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。 ...

2020-02-16 00:36:14 609 0

原创 栈和深度优先搜索(DFS)

与 BFS 类似,深度优先搜索(DFS)是用于在树/图中遍历/搜索的另一种重要算法。也可以在更抽象的场景中使用。 正如树的遍历中所提到的,我们可以用 DFS 进行 前序遍历,中序遍历 和 后序遍历。在这三个遍历顺序中有一个共同的特性:除非我们到达最深的结点,否则我们永远不会回溯。 这也是 DFS ...

2020-02-13 23:00:44 1268 1

原创 栈的设计与算法例题

栈的实现 栈的实现比队列容易。动态数组 足以实现堆栈结构。这里LeetCode官方提供了一个简单的实现供参考: // "static void main" must be defined in a public class. class MyStack { privat...

2020-02-12 01:50:10 552 0

原创 队列和广度优先搜索

广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径。 思路 1. 结点的处理顺序 在第一轮中,我们处理根结点。在第二轮中,我们处理根结点旁边的结点;在第三轮中,我们处理距根结点两步的结点;等等等等。 与树的层序遍历类似,越是接近根结点的结点将越早地遍历。 如果在第 k 轮中将结...

2020-02-08 02:34:42 1515 1

原创 循环与循环双端队列

循环队列 是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为 环形缓冲器。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我...

2020-01-20 23:12:12 1435 0

原创 弗洛伊德的乌龟与兔子

弗洛伊德的乌龟与兔子 Floyd 判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。 结论 1、如果链表...

2020-01-19 22:06:14 1095 0

原创 面向功利编程,面向Star开源? 一个开发者的2019反思总结

我是 却把清梅嗅 ,GitHub开源社区内的一个 功利 的爱好者。 去年的这个时候,我同样做了一个简短的年终总结: 《2018我的博客历程:你带来微笑,我有幸得到》 我不是喜欢一个花时间写非技术类型文章的人,但是每年一篇年终总结于个人确实有所裨益——时隔一年再看,这篇文章段落中的一些吹嘘自己的文字...

2019-12-27 01:02:04 4991 5

原创 反思|Android 列表分页组件Paging的设计与实现:架构设计与原理解析

本文是Android Jetpack Paging系列的第二篇文章;强烈建议 读者将本系列作为学习Paging 阅读优先级最高的文章,如果读者对Paging还没有系统性的认识,请参考: 反思|Android 列表分页组件Paging的设计与实现:系统概述 前言 Paging是一个非常优秀的分页...

2019-12-01 23:39:36 688 0

原创 反思|Android 列表分页组件Paging的设计与实现:系统概述

本文将对Paging分页组件的设计和实现进行一个系统整体的概述,强烈建议 读者将本文作为学习Paging 阅读优先级最高的文章,所有其它的Paging中文博客阅读优先级都应该靠后。

2019-10-25 17:40:56 1127 1

原创 反思|Android 事件分发机制的设计与实现

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。 概述 Android体系本身非常宏大,源码中值得思考和借鉴之处众多。以整体事件分发机制为例,其整个流程涉及到了 系统启动流程(SystemServer)、输入管理(InputManager)、系统服务和UI的通信(Vie...

2019-08-28 18:25:42 953 0

原创 反思|Android LayoutInflater机制的设计与实现

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。 概述 Android体系本身非常宏大,源码中值得思考和借鉴之处众多。以LayoutInflater本身为例,其整个流程中除了调用inflate()函数 填充布局 功能之外,还涉及到了 应用启动、调用系统服务(进程间通信)...

2019-08-19 16:52:14 605 0

原创 反思|Android View机制设计与实现:布局流程

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。 概述 Android本身的View体系非常宏大,源码中值得思考和借鉴之处众多,以View本身的绘制流程为例,其经过measure测量、layout布局、draw绘制三个过程,最终才能够将其绘制出来并展示在用户面前。 相比...

2019-08-13 18:03:09 471 1

原创 反思|Android View机制设计与实现:测量流程

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。 概述 Android本身的View体系非常宏大,源码中值得思考和借鉴之处众多,以View本身的绘制流程为例,其经过measure测量、layout布局、draw绘制三个过程,最终才能够将其绘制出来并展示在用户面前。 本文...

2019-08-09 11:33:08 927 1

原创 JakeWharton评价我的代码像是在打地鼠?

【标题党警告】本文主要内容为 Gradle依赖替换规则详解。 RxJava3版本迁移的血泪史 不久前RxJava正式发布了3.x版本,作为RxJava的爱好者,笔者第一时间对个人项目进行了3.x版本的迁移。 迁移过程中遇到了一个小问题,那就是RxAndroid因为没有及时升级,因此内部还是依赖2...

2019-07-16 23:40:59 1123 2

原创 Flutter与Android混合编码配置笔记

学习Flutter一小段时间,对纯Flutter项目有了一些基本的了解,但更趋近实际开发的应该是将Flutter模块作为一个依赖库添加到原生的Android项目中。 本文笔者将尝试分享个人针对Flutter与Android混编时的配置步骤,以及踩坑过程。 一、初始化Flutter-Module 参...

2019-07-11 20:13:01 1512 2

原创 使用Flutter开发Github客户端及学习历程的小结

本文笔者将尝试分享个人针对Flutter的 学习 并 搭建一个Flutter应用 的过程。 在这一个月学习Flutter的过程中,我不可避免的走了很多弯路,也许这并非坏事,但是还是希望将这些经历表述出来,有两个目的: 1.为自己做一个周期性的总结; 2.也希望能给想学习Flutter的读者一定实...

2019-06-28 00:55:02 1157 0

原创 Android官方架构组件Paging-Ex:列表状态的响应式管理

概述 Paging是Google在2018年I/O大会上推出的适用于Android原生开发的分页库,随着越来越多的开发者着手使用Paging,越来越多的问题暴露出来,最直接的一个问题是: 如何管理列表额外的状态? 这样的需求随处可见,比如 侧滑删除、为评论点赞 等等: 本文将阐述:如何管理Pa...

2019-05-23 23:52:53 1049 3

原创 Android官方架构组件Paging-Ex:为分页列表添加Header和Footer

争取打造 Android Jetpack 讲解的最好的博客系列: Android官方架构组件Lifecycle:生命周期组件详解&原理分析 Android官方架构组件ViewModel:从前世今生到追本溯源 Android官方架构组件LiveData: 观察者模式领域二三事 Androi...

2019-04-07 21:39:33 12755 7

原创 Handler原理分析

Handler的原理分析这个标题,很多文章都写过,最近认真将源码逐行一字一句研究,特此也简单总结一遍。 首先是Handler整个Android消息机制的简单概括: 分三部分对消息机制的整个流程进行阐述: Handler的创建,包括Looper、MessageQueue的创建; Handler发...

2019-04-03 00:39:06 853 1

原创 ThreadLocal原理分析

接下来笔者的文章方向偏向于 Android & Java 面试相关知识点系统性的总结,欢迎关注。 ThreadLocal类是java.lang包下的一个类,用于线程内部的数据存储,通过它可以在指定的线程中存储数据,本文针对该类进行原理分析。 通过思维导图对其进行简单的总结: 一.Thr...

2019-03-31 23:08:54 1265 2

翻译 [译]使用MVI打造响应式APP(八):导航

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION 作者:Hannes Dorfmann 译者:却把清梅嗅 在上一篇博客中,我们探讨了协调模式是如何在Android中应用的。这次我想展示如何在Model-View-Inten...

2019-03-24 13:20:06 6688 0

翻译 [译]使用MVI打造响应式APP[七]:掌握时机(SingleLiveEvent问题)

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART7 - TIMING (SINGLELIVEEVENT PROBLEM) 作者:Hannes Dorfmann 译者:却把清梅嗅 在之前的文章中,我们探讨了正确状态管理的重要性,以及我为什么认为使用类似 ...

2019-03-23 16:53:58 1632 0

翻译 [译]使用MVI打造响应式APP(六):恢复状态

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART6 - RESTORING STATE 作者:Hannes Dorfmann 译者:却把清梅嗅 在前几篇文章中,我们讨论了Model-View-Intent(MVI)和单向数据流的重要性,这极大简化了状态...

2019-03-21 07:32:07 498 0

翻译 [译]使用MVI打造响应式APP(五):轻而易举地Debug

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART5 - DEBUGGING WITH EASE 作者:Hannes Dorfmann 译者:却把清梅嗅 前文我们探讨了Model-View-Intent (MVI)架构模式及其相关特性,在 第一篇文章 中...

2019-03-17 22:15:20 370 0

翻译 [译]使用MVI打造响应式APP(四):独立性UI组件

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART4 - INDEPENDENT UI COMPONENTS 作者:Hannes Dorfmann 译者:却把清梅嗅 这篇博客中,我们将针对如何 如何构建独立组件 进行探讨,我将阐述为什么在我看来 父子关系...

2019-03-15 13:34:16 371 0

翻译 [译]使用MVI打造响应式APP(三):状态折叠器

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART3 - STATE REDUCER 作者:Hannes Dorfmann 译者:却把清梅嗅 在上一章节中,我们针对 如何使用单向流和 Model-View-Intent 模式构建一个简单的页面 进行了探讨...

2019-03-13 21:27:33 373 0

翻译 [译]使用MVI打造响应式APP(二):View层和Intent层

《使用MVI打造响应式APP》翻译系列 [译]使用MVI打造响应式APP(一):Model到底是什么 [译]使用MVI打造响应式APP[二]:View层和Intent层 [译]使用MVI打造响应式APP[三]:状态合并 [译]使用MVI打造响应式APP[四]:IndependentUIComp...

2019-03-10 22:38:34 488 0

翻译 [译]使用MVI打造响应式APP(一):Model到底是什么

原文:《REACTIVE APPS WITH MODEL-VIEW-INTENT - PART1 - MODEL》 作者:Hannes Dorfmann 译者:却把清梅嗅 有朝一日,我突然发现我对于Model层的定义 全部是错误的,更新了认知后,我发现曾经我在Android平台上主题讨论中的那些...

2019-03-04 00:46:32 2090 0

翻译 [译]Object的局限性——Kotlin中的带参单例模式

原文:Kotlin singletons with argument ——object has its limits 作者:Christophe Beyls 译者:却把清梅嗅 在Kotlin中,单例模式被用于替换该编程语言中不存在的static成员和字段。 你通过简单地声明object以创建一...

2019-02-13 00:22:24 2651 1

原创 Android官方架构组件DataBinding-Ex: 双向绑定篇

争取打造 Android Jetpack 讲解的最好的博客系列: Android官方架构组件Lifecycle:生命周期组件详解&原理分析 Android官方架构组件ViewModel:从前世今生到追本溯源 Android官方架构组件LiveData: 观察者模式领域二三...

2019-01-15 23:48:55 5382 1

原创 Android官方架构组件LiveData: 观察者模式领域二三事

本文是 《Android Jetpack 官方架构组件》 系列的最后一篇文章,和一些朋友的观点不同的是,我认为它是 最重要 的核心组件,因为 LiveData本身很简单,但其代表却正是 MVVM 模式最重要的思想,即 数据驱动视图(也有叫观察者模式、响应式等)——这也是摆脱 顺序性编程思维 的重要...

2018-12-28 00:40:00 2715 3

原创 2018我的博客历程:你带来微笑,我有幸得到

从大学毕业至今已经从事软件开发2年有余了,同样,写博客的习惯也已经坚持了2年。我很少写技术无关的文章,时值年终,我还是想通过分享自己的经历,同时分享这2年我对 写博客的理解,或者说是对 学习方式的思考。 坎坷的博文生涯 坚持写博客是一个很有意思的事情,2016年年底之前,我还没有开始写博客,但是很...

2018-12-18 00:53:49 1955 11

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