却把清梅嗅的博客

私信 关注
却把清梅嗅
码龄5年

Android开发者,爱好写作,曾多次作为嘉宾受邀参加GDG (Google Developer Groups)线下活动进行分享。

  • 703,742
    被访问量
  • 109
    原创文章
  • 7,703
    作者排名
  • 1,601
    粉丝数量
  • 毕业院校 河南大学
  • 于 2016-08-06 加入CSDN
获得成就
  • 博客专家认证
  • 获得572次点赞
  • 内容获得419次评论
  • 获得834次收藏
  • GitHub 获得4,447Stars
荣誉勋章
兴趣领域
  • #Android
    #Flutter#Kotlin#Java
TA的专栏
  • Algorithm
    10篇
  • Android Jetpack
    11篇
  • RxJava
    23篇
  • Kotlin
    17篇
  • Flutter
    2篇
关于我
Hello,我是 却把清梅嗅 ,Android开发者,女儿奴,爱好写作,曾多次作为嘉宾受邀参加GDG (Google Developer Groups)线下活动进行分享。欢迎关注我的 博客 或者 GitHub 。 如果您觉得文章对您有价值,欢迎 ❤️,督促我写出更好的文章 :)

- 我的学习体系
- 关于知识付费

  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

[译] 编写AndroidStudio插件(五):本地化和通知

原文:Write an Android Studio Plugin Part 5: Localization and Notifications作者:Marcos Holgado译者:却把清梅嗅《编写AndroidStudio插件》系列是 IntelliJ IDEA 官方推荐的学习IDE插件开发的博客专栏,希望对有需要的读者有所帮助。在本系列的第四部分中,我们学习了如何在插件中集成诸如Jira Cloud Platform之类的第三方API,以及如何使用MVP或MVC之类的模式开发。本文我将部分.
翻译
40阅读
0评论
0点赞
发布博客于 2 月前

[译] 编写AndroidStudio插件(四):集成Jira

原文:Write an Android Studio Plugin Part 4: Jira Integration作者:Marcos Holgado译者:却把清梅嗅《编写AndroidStudio插件》系列是 IntelliJ IDEA 官方推荐的学习IDE插件开发的博客专栏,希望对有需要的读者有所帮助。在本系列的第三部分中,我们学习了如何使用Component对数据进行持久化,并利用这些数据来创建新的设置页面。在今天的文章中,我们将使用这些数据将Jira与我们的插件快速集成在一起。请记住.
翻译
67阅读
0评论
0点赞
发布博客于 2 月前

[译] 编写AndroidStudio插件(三):设置页

原文:Write an Android Studio Plugin Part 3: Settings作者:Marcos Holgado译者:却把清梅嗅《编写AndroidStudio插件》系列是 IntelliJ IDEA 官方推荐的学习IDE插件开发的博客专栏,希望对有需要的读者有所帮助。在本系列的第二部分中,我们学习了如何使用Component对数据进行持久化,以及通过这些数据,在用户更新我们的插件后展示更新了哪些新功能。在今天的文章中,我们将看到如何使用持久化的数据来创建设置页面。请记.
翻译
39阅读
0评论
0点赞
发布博客于 2 月前

[译] 编写AndroidStudio插件(二):持久化数据

原文:Write an Android Studio Plugin Part 2: Persisting data作者:Marcos Holgado译者:却把清梅嗅《编写AndroidStudio插件》系列是 IntelliJ IDEA 官方推荐的学习IDE插件开发的博客专栏,希望对有需要的读者有所帮助。在本系列的第一部分中,我们了解了如何为Android Studio创建一个基本的插件,并编写了第一个Action。本文我们将了解如何在插件中对数据进行持久化。请记住,您可以在GitHub上找.
翻译
46阅读
0评论
0点赞
发布博客于 2 月前

[译] 编写AndroidStudio插件(一):创建一个基本插件

原文:Write an Android Studio Plugin Part 1: Creating a basic plugin作者:Marcos Holgado译者:却把清梅嗅《编写AndroidStudio插件》系列是 IntelliJ IDEA 官方推荐的学习插件IDE开发博客专栏,希望对有需要的读者有所帮助。早在10月的时候,我就在Droidcon UK 2018上针对如何在Android Studio上创建自己的插件,以及如何使所有相关操作自动化进行了讨论。因为当时我并没有很多时间对.
翻译
78阅读
1评论
1点赞
发布博客于 2 月前

反思 | 事件总线的局限性,组件化开发流程中通信机制的设计与实现

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。背景诸如EventBus\RxBus\LiveDataBus的事件总线库在业内正遭滥用。诚然,事件总线看起来 小而美 ,但随着业务复杂度上升,事件的发送和订阅到处分布,这个优势反而成为了负担,因此,笔者不建议在任何量级的项目中使用事件总线库。更多原因读者可参考 这篇文章 。更合理的方案是什么呢?在量级较小的项目中,开发者应该通过 依赖注入 将Callback进行不同层级的依次传递,以保证 层级间的依赖关系足够清晰。而对于.
原创
10551阅读
11评论
8点赞
发布博客于 2 月前

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

反思|官方也无力回天?Android SharedPreferences的设计与实现反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。起源就在前几日,有幸拜读到 HiDhl 的文章,继腾讯开源类似功能的MMKV之后,Google官方维护的 Jetpack DataStore 组件横空出世——这是否意味着无论是腾讯三方还是Google官方的角度,SharedPreferences都彻底告别了这个时代?无论是MMKV的支持者还是DataStore的拥趸,SharedPrefe
原创
7488阅读
3评论
60点赞
发布博客于 4 月前

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

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述对于Android开发者而言,ANR是一个老生常谈的问题,站在面试者的角度,似乎说出 「不要在主线程做耗时操作」 就算合格了。但是,ANR机制到底是什么,其背后的原理究竟如何,为什么要设计出这样的机制?这些问题时时刻刻会萦绕脑海,而想搞清楚这些,就不得不提到Android自身的 输入系统 (Input System)。Android自身的 输入系统 又是什么?一言以蔽之,任何与Android设备的交互——我们称之为 输.
原创
1818阅读
0评论
7点赞
发布博客于 6 月前

反思|Android源码模块化管理工具Repo分析

「反思」 系列是笔者对于 学习归纳 一种新的尝试,其起源与目录请参考 这里 。起源随着Android项目 模块化 或 插件化 项目业务的愈发复杂,开发流程中通过版本控制工具(比如Git)管理项目的成本越来越高。以大名鼎鼎的 Android源代码开源项目 (Android Open-Source Project,下文简称 ASOP)为例,截止2020年初,Android10的源码项目,其模...
原创
1022阅读
0评论
1点赞
发布博客于 10 月前

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

「反思」 系列是笔者一个新的尝试,其起源与目录请参考 这里 。概述完整的掌握 Android 事件分发体系并非易事,其整个流程涉及到了 系统启动流程(SystemServer)、输入管理(InputManager)、系统服务和UI的通信(ViewRootImpl + Window + WindowManagerService)、View层级的 事件分发机制 等等一系列的环节。事件拦截机制...
原创
1280阅读
1评论
2点赞
发布博客于 10 月前

哈希映射用法及算法例题

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。用法哈希映射 是用于存储 (key, value) 键值对的一种实现。使用哈希映射的第一个场景是,我们 需要更多的信息,而不仅仅是键。然后通过哈希映射 建立密钥与信息之间的映射关系。另一个常见的场景是 按键聚合所有信息。我们也可以使用哈希映射来实现这一目标。例题1、两数之和...
原创
6335阅读
2评论
2点赞
发布博客于 1 年前

哈希集合用法及算法例题

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。用法哈希集 是集合的实现之一,它是一种存储 不重复值 的数据结构。因此,通常,使用哈希集来检查该值是否已经出现过。让我们来看一个例子:给定一个整数数组,查找数组是否包含任何重复项。这是一个典型的问题,可以通过哈希集来解决。你可以简单地迭代每个值并将值插入集合中。 如果...
原创
1284阅读
0评论
0点赞
发布博客于 1 年前

哈希表原理及简单设计

本文为博主算法学习过程中的学习笔记,主要内容来源于其他平台或书籍,出处请参考下方 参考&感谢 一节。介绍哈希表 是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。有两种不同类型的哈希表:哈希集合 和 哈希映射。哈希集合是 集合 数据结构的实现之一,用于存储 非重复值。哈希映射是 映射 数据结构的实现之一,用于存储(key, value)键值对。通过选择合适的...
原创
919阅读
0评论
2点赞
发布博客于 1 年前

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

在之前的章节中,我们已经介绍了如何解决树的遍历问题。我们也已经尝试过使用递归解决树的为 前序遍历 、 中序遍历 和 后序遍历 问题。事实上,递归 是解决树相关问题的最有效和最常用的方法之一。本节中,我们将会介绍两种典型的递归方法。解决方案本小节内容节选自 LeetCode:运用递归解决树的问题 .递归是解决树的相关问题最有效和最常用的方法之一。我们知道,树可以以递归的方式定义为一个...
原创
510阅读
0评论
0点赞
发布博客于 1 年前

二叉树的递归与迭代遍历

二叉树的递归与迭代遍历本文将针对二叉树中几种常见的遍历方法进行介绍。遍历方式前序遍历前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。中序遍历中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。后序遍历后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。递归实现递归实现二叉树的遍历是非常简单的,其核心就是 深度优先搜索(DFS) 算法。由于比较简单,...
原创
667阅读
0评论
1点赞
发布博客于 1 年前

栈和深度优先搜索(DFS)

与 BFS 类似,深度优先搜索(DFS)是用于在树/图中遍历/搜索的另一种重要算法。也可以在更抽象的场景中使用。正如树的遍历中所提到的,我们可以用 DFS 进行 前序遍历,中序遍历 和 后序遍历。在这三个遍历顺序中有一个共同的特性:除非我们到达最深的结点,否则我们永远不会回溯。这也是 DFS 和 BFS 之间最大的区别,BFS永远不会深入探索,除非它已经在当前层级访问了所有结点。模版递归...
原创
1676阅读
1评论
1点赞
发布博客于 1 年前

栈的设计与算法例题

栈的实现栈的实现比队列容易。动态数组 足以实现堆栈结构。这里LeetCode官方提供了一个简单的实现供参考:// "static void main" must be defined in a public class.class MyStack { private List<Integer> data; // store elements...
原创
660阅读
0评论
1点赞
发布博客于 1 年前

队列和广度优先搜索

广度优先搜索(BFS)的一个常见应用是找出从根结点到目标结点的最短路径。思路1. 结点的处理顺序在第一轮中,我们处理根结点。在第二轮中,我们处理根结点旁边的结点;在第三轮中,我们处理距根结点两步的结点;等等等等。与树的层序遍历类似,越是接近根结点的结点将越早地遍历。如果在第 k 轮中将结点 X 添加到队列中,则根结点与 X 之间的最短路径的长度恰好是 k。也就是说,第一次找到目标结点时...
原创
1615阅读
1评论
3点赞
发布博客于 1 年前

循环与循环双端队列

循环队列 是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为 环形缓冲器。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。为什么使用循环队列?这里我们先对 队列 的简单实现进行简单展示,队...
原创
1562阅读
0评论
2点赞
发布博客于 1 年前

弗洛伊德的乌龟与兔子

弗洛伊德的乌龟与兔子Floyd 判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。结论1、如果链表上存在环,那么在某个环上以不同速度前进的2个指针必定会在某个时刻相遇;2、根据结论1找到的相遇点可找...
原创
1181阅读
0评论
0点赞
发布博客于 1 年前

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

我是 却把清梅嗅 ,GitHub开源社区内的一个 功利 的爱好者。去年的这个时候,我同样做了一个简短的年终总结:《2018我的博客历程:你带来微笑,我有幸得到》我不是喜欢一个花时间写非技术类型文章的人,但是每年一篇年终总结于个人确实有所裨益——时隔一年再看,这篇文章段落中的一些吹嘘自己的文字,多少都让我有点尴尬。同时,我看到了过去自己一些 不成熟的想法 ,与一年后的自己的理念有所冲突,我...
原创
5085阅读
5评论
77点赞
发布博客于 2 年前

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

本文是Android Jetpack Paging系列的第二篇文章;强烈建议 读者将本系列作为学习Paging 阅读优先级最高的文章,如果读者对Paging还没有系统性的认识,请参考:反思|Android 列表分页组件Paging的设计与实现:系统概述前言Paging是一个非常优秀的分页组件,与其它热门的分页相关库不同的是,Paging更偏向注重服务于 业务 而非 UI 。——我们都知道...
原创
768阅读
0评论
2点赞
发布博客于 2 年前

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

本文将对Paging分页组件的设计和实现进行一个系统整体的概述,强烈建议 读者将本文作为学习Paging 阅读优先级最高的文章,所有其它的Paging中文博客阅读优先级都应该靠后。
原创
1235阅读
1评论
9点赞
发布博客于 2 年前

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

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android体系本身非常宏大,源码中值得思考和借鉴之处众多。以整体事件分发机制为例,其整个流程涉及到了 系统启动流程(SystemServer)、输入管理(InputManager)、系统服务和UI的通信(ViewRootImpl + Window + WindowManagerService)、事件分发 等等...
原创
1035阅读
0评论
3点赞
发布博客于 2 年前

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

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android体系本身非常宏大,源码中值得思考和借鉴之处众多。以LayoutInflater本身为例,其整个流程中除了调用inflate()函数 填充布局 功能之外,还涉及到了 应用启动、调用系统服务(进程间通信)、对应组件作用域内单例管理、额外功能扩展 等等一系列复杂的逻辑。本文笔者将针对LayoutInla...
原创
650阅读
0评论
1点赞
发布博客于 2 年前

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

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android本身的View体系非常宏大,源码中值得思考和借鉴之处众多,以View本身的绘制流程为例,其经过measure测量、layout布局、draw绘制三个过程,最终才能够将其绘制出来并展示在用户面前。相比 测量流程 ,布局流程 相对简单很多,如果读者不了解 测量流程 ,建议阅读这篇文章:反思 | An...
原创
525阅读
1评论
2点赞
发布博客于 2 年前

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

反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 。概述Android本身的View体系非常宏大,源码中值得思考和借鉴之处众多,以View本身的绘制流程为例,其经过measure测量、layout布局、draw绘制三个过程,最终才能够将其绘制出来并展示在用户面前。本文将针对绘制过程中的 测量流程 的设计思想进行系统地归纳总结,读者需要对View的measure()相...
原创
985阅读
1评论
4点赞
发布博客于 2 年前

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

【标题党警告】本文主要内容为 Gradle依赖替换规则详解。RxJava3版本迁移的血泪史不久前RxJava正式发布了3.x版本,作为RxJava的爱好者,笔者第一时间对个人项目进行了3.x版本的迁移。迁移过程中遇到了一个小问题,那就是RxAndroid因为没有及时升级,因此内部还是依赖2.x版本的RxJava,这就导致项目的依赖发生了冲突。笔者的解决方式非常简单,既然RxAndroi...
原创
1208阅读
2评论
2点赞
发布博客于 2 年前

Flutter与Android混合编码配置笔记

学习Flutter一小段时间,对纯Flutter项目有了一些基本的了解,但更趋近实际开发的应该是将Flutter模块作为一个依赖库添加到原生的Android项目中。本文笔者将尝试分享个人针对Flutter与Android混编时的配置步骤,以及踩坑过程。一、初始化Flutter-Module参考 官方文档 ,首先需要确认Flutter-Module依赖库文件夹的位置,简单来说,这里有两种方式:...
原创
1583阅读
2评论
5点赞
发布博客于 2 年前

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

本文笔者将尝试分享个人针对Flutter的 学习 并 搭建一个Flutter应用 的过程。在这一个月学习Flutter的过程中,我不可避免的走了很多弯路,也许这并非坏事,但是还是希望将这些经历表述出来,有两个目的:1.为自己做一个周期性的总结;2.也希望能给想学习Flutter的读者一定实质性的参考。关于笔者总结的Flutter入门学习计划,可直接跳转文末的 Flutter入门学习计...
原创
1225阅读
0评论
2点赞
发布博客于 2 年前

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

概述Paging是Google在2018年I/O大会上推出的适用于Android原生开发的分页库,随着越来越多的开发者着手使用Paging,越来越多的问题暴露出来,最直接的一个问题是:如何管理列表额外的状态?这样的需求随处可见,比如 侧滑删除、为评论点赞 等等:本文将阐述:如何管理Paging分页列表的 状态,为何这样设计,以及设计的过程。列表的状态问题和市面上其它热门的分页库相比...
原创
1132阅读
3评论
7点赞
发布博客于 2 年前

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

争取打造 Android Jetpack 讲解的最好的博客系列:Android官方架构组件Lifecycle:生命周期组件详解&原理分析Android官方架构组件ViewModel:从前世今生到追本溯源Android官方架构组件LiveData: 观察者模式领域二三事Android官方架构组件Paging:分页库的设计美学Android官方架构组件Paging-Ex:为分页列...
原创
12866阅读
7评论
12点赞
发布博客于 2 年前

Handler原理分析

Handler的原理分析这个标题,很多文章都写过,最近认真将源码逐行一字一句研究,特此也简单总结一遍。首先是Handler整个Android消息机制的简单概括:分三部分对消息机制的整个流程进行阐述:Handler的创建,包括Looper、MessageQueue的创建;Handler发送消息,Message是如何进入消息队列MessageQueue的(入列);Looper轮询消息,M...
原创
896阅读
1评论
2点赞
发布博客于 2 年前

ThreadLocal原理分析

接下来笔者的文章方向偏向于 Android & Java 面试相关知识点系统性的总结,欢迎关注。ThreadLocal类是java.lang包下的一个类,用于线程内部的数据存储,通过它可以在指定的线程中存储数据,本文针对该类进行原理分析。通过思维导图对其进行简单的总结:一.ThreadLocal源码分析ThreadLocal类最重要的几个方法如下:get():T ...
原创
1319阅读
2评论
4点赞
发布博客于 2 年前

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

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION作者:Hannes Dorfmann译者:却把清梅嗅在上一篇博客中,我们探讨了协调模式是如何在Android中应用的。这次我想展示如何在Model-View-Intent中使用它。如果您还不知道协调器模式是什么,我强烈建议您回过头来阅读上文内容。在MVI中应用此模...
翻译
6727阅读
0评论
0点赞
发布博客于 2 年前

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

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART7 - TIMING (SINGLELIVEEVENT PROBLEM)作者:Hannes Dorfmann译者:却把清梅嗅在之前的文章中,我们探讨了正确状态管理的重要性,以及我为什么认为使用类似 Github上Google架构组件的这个repo 中的 SingleLiveEvent 并不是一个好...
翻译
1835阅读
0评论
1点赞
发布博客于 2 年前

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

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART6 - RESTORING STATE作者:Hannes Dorfmann译者:却把清梅嗅在前几篇文章中,我们讨论了Model-View-Intent(MVI)和单向数据流的重要性,这极大简化了状态的恢复,那么其过程和原理是什么呢,本文我们针对这个问题进行探讨。我们将针对2个场景进行探讨:在...
翻译
535阅读
0评论
1点赞
发布博客于 2 年前

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

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART5 - DEBUGGING WITH EASE作者:Hannes Dorfmann译者:却把清梅嗅前文我们探讨了Model-View-Intent (MVI)架构模式及其相关特性,在 第一篇文章 中,我们谈到了 单项数据流的重要性 和 应用状态应该被业务逻辑驱动。本文我们将展示这种架构模式会怎样回...
翻译
407阅读
0评论
2点赞
发布博客于 2 年前

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

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART4 - INDEPENDENT UI COMPONENTS作者:Hannes Dorfmann译者:却把清梅嗅这篇博客中,我们将针对如何 如何构建独立组件 进行探讨,我将阐述为什么在我看来 父子关系会导致坏味道的代码,以及为何这种关系是没有意义的。有这样一个问题时不时涌现在我的脑海中—— MVI...
翻译
412阅读
0评论
0点赞
发布博客于 2 年前

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

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART3 - STATE REDUCER作者:Hannes Dorfmann译者:却把清梅嗅在上一章节中,我们针对 如何使用单向流和 Model-View-Intent 模式构建一个简单的页面 进行了探讨;本章节,我们将在reducer的帮助下实现MVI模式中更加复杂的页面。如果你还未阅读前两个章节,...
翻译
411阅读
0评论
1点赞
发布博客于 2 年前

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

《使用MVI打造响应式APP》翻译系列[译]使用MVI打造响应式APP(一):Model到底是什么[译]使用MVI打造响应式APP[二]:View层和Intent层[译]使用MVI打造响应式APP[三]:状态合并[译]使用MVI打造响应式APP[四]:IndependentUIComponents[译]使用MVI打造响应式APP[五]:DebuggingWithEase[译]使用M...
翻译
531阅读
0评论
1点赞
发布博客于 2 年前

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

原文:《REACTIVE APPS WITH MODEL-VIEW-INTENT - PART1 - MODEL》作者:Hannes Dorfmann译者:却把清梅嗅有朝一日,我突然发现我对于Model层的定义 全部是错误的,更新了认知后,我发现曾经我在Android平台上主题讨论中的那些困惑或者头痛都消失了。从结果上来说,最终我选择使用 RxJava 和 Model-View-Int...
翻译
2229阅读
0评论
0点赞
发布博客于 2 年前

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

原文:Kotlin singletons with argument——object has its limits作者:Christophe Beyls译者:却把清梅嗅在Kotlin中,单例模式被用于替换该编程语言中不存在的static成员和字段。 你通过简单地声明object以创建一个单例:object SomeSingleton与类不同,object 不允许有任何构造函数,如...
翻译
2843阅读
1评论
0点赞
发布博客于 2 年前

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

争取打造 Android Jetpack 讲解的最好的博客系列:Android官方架构组件Lifecycle:生命周期组件详解&amp;amp;原理分析Android官方架构组件ViewModel:从前世今生到追本溯源Android官方架构组件LiveData: 观察者模式领域二三事Android官方架构组件Paging:分页库的设计美学Android官方架构组件Navigation:大巧不...
原创
5986阅读
1评论
9点赞
发布博客于 2 年前

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

本文是 《Android Jetpack 官方架构组件》 系列的最后一篇文章,和一些朋友的观点不同的是,我认为它是 最重要 的核心组件,因为 LiveData本身很简单,但其代表却正是 MVVM 模式最重要的思想,即 数据驱动视图(也有叫观察者模式、响应式等)——这也是摆脱 顺序性编程思维 的重要一步。本文默认读者已经学习了 Lifecycle , 欢迎关注笔者的Jetpack系列:争取打...
原创
2921阅读
3评论
4点赞
发布博客于 3 年前

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

从大学毕业至今已经从事软件开发2年有余了,同样,写博客的习惯也已经坚持了2年。我很少写技术无关的文章,时值年终,我还是想通过分享自己的经历,同时分享这2年我对 写博客的理解,或者说是对 学习方式的思考。坎坷的博文生涯坚持写博客是一个很有意思的事情,2016年年底之前,我还没有开始写博客,但是很多文章已经开始宣传 写博客的好处,我看的非常心动,毫不避讳的说,在博文生涯的伊始,我写博客的主要目的是...
原创
1985阅读
11评论
9点赞
发布博客于 3 年前

Android官方架构组件ViewModel:从前世今生到追本溯源

争取打造 Android Jetpack 讲解的最好的博客系列:Android官方架构组件Lifecycle:生命周期组件详解&amp;amp;amp;原理分析Android官方架构组件ViewModel:从前世今生到追本溯源Android官方架构组件Paging:分页库的设计美学Android官方架构组件Navigation:大巧不工的Fragment管理框架实战:使用MVVM尝试开发Github...
原创
6208阅读
6评论
12点赞
发布博客于 3 年前

使用MVVM尝试开发Github客户端及对编程的一些思考

本文中我将尝试分享我个人 搭建个人MVVM项目 的过程中的一些心得和踩坑经历,以及在这过程中目前对 编程本质 的一些个人理解和感悟,特此分享以期讨论及学习进步。缘由最近在尝试搭建自己理解的 MVVM模式 的应用程序,在这近一个月中,我思考了很多,也参考了若干Github上MVVM项目源码,并从中获益匪浅。我根据所得搭建了一个MVVM开发模式的Github客户端,并托管在了自己的github上...
原创
2591阅读
7评论
5点赞
发布博客于 3 年前

Android Camera 系列(三)Camera API 详解

概述Camera 可能是接下来个人想深入学习的课题,准备新起一个系列,从个人的角度总结阐述自己对于 Android Camera 的研究过程,希望也能够对其他想学习 Camera 的同学一些帮助。本小节内容为 Android Camera 官方文档 的精要翻译,原文请参考:Android Camera: Camera API正文Android Framework 包括对设备上可用...
原创
3776阅读
0评论
0点赞
发布博客于 3 年前

Android Camera 系列(二)控制Camera

Camera系列文章首发于 我的慕课网,欢迎关注。概述Camera 可能是接下来个人想深入学习的课题,准备新起一个系列,从个人的角度总结阐述自己对于 Android Camera 的研究过程,希望也能够对其他想学习 Camera 的同学一些帮助。本小节内容为 Android Camera 官方文档 的精要翻译,原文请参考:Android Camera: Control the ca...
原创
1974阅读
0评论
0点赞
发布博客于 3 年前

Android Camera 系列(一)拍照和录制视频

原文地址:1.Camera: Take photos2.Camera: Record videos一、拍照本课程将阐述如何通过委托Android设备上的其他相机应用程序进行拍照 (如果您更愿意构建自己的相机功能,请参阅 控制相机 )。请求相机功能如果您的应用程序的基本功能涉及到 拍照,请将其在Google Play上的可见性限制为具有相机的设备。 以声明您的应用程序依赖于摄像头,请...
原创
6639阅读
0评论
5点赞
发布博客于 3 年前

Linux配置JDK和Tomcat

最近将公司的项目部署了Jenkins持续集成,遇到了几个麻烦的点,其中之一就是对JDK和Tomcat的配置,特此记录。本地系统:MacOS远程系统:CentOS_7_04_64_20G_alibase_201701015.vhd1.安装jdkyum search java|grep jdk 查看yum库中都有哪些jdk版本yum install java-1.8.0-openjdk...
原创
1202阅读
0评论
0点赞
发布博客于 3 年前

Linux配置AndroidSDK&Jenkins远程部署

最近将公司的项目部署了Jenkins持续集成,遇到了几个麻烦的点,其中之一就是将Android SDK进行配置在远程服务器(总结下来还是自己对Linux命令还不够熟悉),特此记录。系统: Ubuntu Server 16.04.1 LTS 64位前置:完成JDK的环境搭建1.下载SDK点击进入下载网址 下载对应的 android-sdk_r24.4.1-linux.tgz 文件。2....
原创
1865阅读
0评论
1点赞
发布博客于 3 年前

不要打破链式调用!一个极低成本的RxJava全局Error处理方案

RxJava与CallbackHell在正式铺展开本文内容之前,我们先思考一个问题:你认为 RxJava 真的好用吗,它好用在哪?CallbackHell,中文翻译为 回调地狱,在以往没有依赖RxJava + Retrofit进行网络请求的代码中,这种代码并不少见(比如AsyncTask),我曾有幸见识并维护了各种3层4层AsyncTask回调嵌套的项目——后来我一直拒绝阅读Async...
原创
5422阅读
10评论
6点赞
发布博客于 3 年前

告别Dagger2,Android的Kotlin项目中使用Kodein进行依赖注入

前言:依赖注入浅谈Dagger2的困境对于依赖注入(Dependency Injection,简称DI)来讲,它并非是一个新鲜的词汇,实际上,它很早就被提出并且应用在了企业级的web应用开发当中,比如Spring。在Android开发领域内,毫无疑问,Google大名鼎鼎的 Dagger2 是依赖注入框架的首选工具库,它非常优秀,Github上数以万计的star是最强力的佐证,...
原创
3483阅读
3评论
3点赞
发布博客于 3 年前

Android开发从Dagger2迁移至Kodein的感受

原文:From Dagger2 to Kodein: A small experiment 作者:Allan Yoshio Hasegawa 译者:却把清梅嗅译者说我是却把清梅嗅,一个普通的Android开发者。去年,我写了一系列关于Android开发者依赖注入框架 Dagger2 及 dagger.android 的博客: Android 神兵利器Da...
翻译
1686阅读
0评论
0点赞
发布博客于 3 年前

解放双手,Android开发应该尝试的UI自动化测试

本文由 玉刚说写作平台 提供写作赞助 原作者:却把清梅嗅 原文地址:https://mp.weixin.qq.com/s/ODbqUHjQUTA79UyI5Fw5Mw 版权声明:本文版权归微信公众号 玉刚说 所有,未经许可,不得以任何形式转载! 困境 你在南方的艳阳里,手指纷飞;我在北方的寒夜里,喝杯咖啡。接下来我将说到这种情况并非个例——作为...
原创
4108阅读
3评论
4点赞
发布博客于 3 年前

全副武装!AndroidUI自动化测试在RxImagePicker中的实践历程

如果您不是很了解Android的自动化测试,或者还不了解UI自动化测试对于Android开发者的意义,请参考笔者的文章《解放双手,Android开发应该尝试的UI自动化测试(将于近期发布)》。概述我是却把清梅嗅,一个普通的Android开发者,除了日常工作之外,我还喜欢在我的Github上开源分享自己写的一些小工具。其中我个人比较满意的是RxImagePicker,它是我花...
原创
1065阅读
2评论
3点赞
发布博客于 3 年前

Java将Powermock和Mockito搭配进行单元测试

本文为Powermock官方文档Mockito篇的中文翻译 原文:https://github.com/powermock/powermock/wiki/Mockito 翻译:却把清梅嗅简介Powermock提供了基础的PowerMockito类,你仍然可以通过初始化 mock/object/class 并配置它们的校验、期望行为、或者其他,以达到通过Mockito...
翻译
5532阅读
0评论
2点赞
发布博客于 3 年前

Android用DSL实现复杂RecyclerView的思路分析

阅读本文需要您对 DSL, Kotlin, DataBinding 有一定的了解,阅读时长约 8分钟。ReactiveX之毒响应式编程是一种面向数据流和变化传播的编程范式。随着自己知识领域的逐渐深入,我越来越依赖 RxJava。在Java语言中,通过lambda和方法引用,配合RxJava额外提供的函数式接口,链式调用的代码写起来既优美又有逼格。RxJava的毒性令人欲罢不...
原创
799阅读
0评论
0点赞
发布博客于 3 年前

Kotlin中用DSL代替建造者模式

原文:Kotlin-ifying a Builder Pattern 原文地址:https://medium.com/google-developers/kotlin-ifying-a-builder-pattern-e5540c91bdbe 原文作者:Doug Sigelbaum 翻译:却把清梅嗅在Java语言中,当一个对象的实例化需要多个参数时,建造者模式(Bui...
翻译
1469阅读
2评论
0点赞
发布博客于 3 年前

如何通俗理解设计模式及其思想

本文由 玉刚说写作平台 提供写作赞助 原作者:却把清梅嗅 原文地址:https://mp.weixin.qq.com/s/T6ZCQRydzFgVUezlywC8Zw 版权声明:本文版权归微信公众号 玉刚说 所有,未经许可,不得以任何形式转载! 术与道数据结构,算法,设计模式被认为是程序员必备技能的三叉戟,如果说编程语言的语法特性和业务编码能力是【术】,...
原创
20745阅读
12评论
24点赞
发布博客于 3 年前

Android官方架构组件Paging:分页库的设计美学

应该是 Android Jetpack 讲解的最好的博客系列: Android官方架构组件Paging:分页库的设计美学 Android官方架构组件Navigation:大巧不工的Fragment管理框架 Android官方架构组件Lifecycle:生命周期组件详解&amp;amp;amp;amp;amp;amp;amp;amp;原理分析 前言我是一个崇尚 开源 的Android开发者,在过去的一段时间里,...
原创
25220阅读
19评论
18点赞
发布博客于 3 年前

2018 Google IO干货摘要及对国内Android开发者的影响

本文由 玉刚说写作平台 提供写作赞助,赞助金额:300元 原作者:却把清梅嗅 原文地址:https://mp.weixin.qq.com/s/h0HUyrpbDtbEeiY2Z3-POQ 版权声明:本文版权归微信公众号 玉刚说 所有,未经许可,不得以任何形式转载! 前言美国当地时间5月8日,2018年 Google I/O开发者大会在美国加州山景城拉开帷幕。...
原创
6656阅读
4评论
4点赞
发布博客于 3 年前

Android官方架构组件Navigation:大巧不工的Fragment管理框架

前言我在项目中尽量避免 使用 和 管理 Fragment, 尤其是处理Fragment的 多重嵌套 和 回退栈的情况。所幸有Activity在,我绕过了很多 Fragment 复杂的使用场景——必须承认,相比Activity的简单易上手,Fragment的古灵精怪令我头痛不已。当然,Github上也有很多前辈对于Fragment的管理框架,这是 最简单 的解决方案,比如目前比较火的 Fr...
原创
22705阅读
19评论
21点赞
发布博客于 3 年前

RxImagePicker:从零实现灵活且可高度定制的Android图片选择架构

前言RxImagePicker : 支持RxJava2响应式流、灵活可高度定制的Android图片选择器。这是我花费了数月闲暇时间从零开始写的一个库,在这期间,我学习到了很多,我想把自己的一些所得所感,以及这期间的一些思路,能够通过一篇文章的形式讲述出来,这就是本文的起源。一.动机在展开本文之前,我希望能够占用一些篇幅先自我回答三个问题: 1. 为什么要”重复”造轮子?...
原创
1950阅读
3评论
3点赞
发布博客于 3 年前

Android 用Groovy实现扇贝阅读APP的自动阅读功能

动机最近因为想要英语学习,特下载了「扇贝阅读」App,保证自己抽空能够提升一下自己的英语水平。这个App有一个功能,就是打卡功能,每天成功阅读完两篇英语短文,就能完成每日打卡,并领取一些奖励。问题就出现在这里,因为这个App的设定是,如果天天都坚持打卡,那么你就能持续的获得奖励,这些奖励可用来兑换付费的英语书。为了保证能够最大化每日奖励,我就必须坚持阅读打卡,平时这个设定没啥问题,但是有时候(就是前
原创
2274阅读
1评论
2点赞
发布博客于 3 年前

Groovy学习笔记(四):特殊注解

1.@Canonical如果要编写的toString()方法只是简单地显示以逗号分隔的字段值,则可以使用@Canonical变换让Grooovy编译器帮来干这个活。默认情况下,它生成的代码会包含所有字段。不过可以让它仅包含特定字段,而去掉其他字段。@Canonicalclass Student { String firstName String lastName...
原创
1841阅读
0评论
0点赞
发布博客于 3 年前

Groovy学习笔记(三):接口,布尔判断,操作符重载

Groovy接口Groovy 不需要显示的通过new创建匿名内部类的实例。//Button对象class Button { void addOnClickListener(OnClickListener listener) { listener.onClick() } void addOnLongClickListener(OnLongClickListener
原创
1014阅读
0评论
0点赞
发布博客于 3 年前

Groovy学习笔记(二):Groovy的基本语法

1、Java和Groovy对比1.1、Hello Groovy!从一个简单的案例开始:class A01_GroovyApp { public static void hello() { println('Hello Groovy!') } public static void main(String[] args) { ...
原创
490阅读
0评论
0点赞
发布博客于 3 年前

Groovy学习笔记(一):下载及配置环境

本文简单讲述了Mac/Linux系统Groovy的环境配置Windows系统Groovy的环境配置我们首先进入Groovy的官网:http://www.groovy-lang.org/download.htmlMac下配置Groovy看到官网提示,我们可以直接下载groovy sdk的压缩包,但是对于Mac或者Linux用户,官方更推荐我们使用 SDKMAN(这是什么奇怪...
原创
1824阅读
0评论
0点赞
发布博客于 3 年前

一行Java代码实现RecyclerViewAdapter?一行都不需要!

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布前言听说这种【一行代码实现xxx】用烂的标题总是能够吸引到更多的关注。在批判笔者这种行为之前,我们先来总结一下目前Android开发中通过RecyclerView列表的几种常见实现方式。1.直接使用原生RecyclerView提供的API,自己实现RecyclerView的Adapter和ViewHolde...
原创
1181阅读
9评论
0点赞
发布博客于 3 年前

Android架构中添加AutoDispose解决RxJava内存泄漏

概述在我的上一篇文章 解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析 中,详细阐述了 如何通过使用 RxLifecycle 解决Android开发中RxJava的可能会导致的内存泄漏问题;RxLifecycle 内部的实现原理;在文章的最后,我提到了 AutoDispose 这个库,这个库同样可以解决Android生命周期组件导致的RxJava的内存泄漏情...
原创
17116阅读
33评论
12点赞
发布博客于 3 年前

Gradle学习笔记(四)构建Variant

一、构建类型你可以在buildTypes代码块中定义构建类型。下面是AndroidStudio创建的构建文件的标准buildTypes代码块: buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-andr
原创
1174阅读
0评论
1点赞
发布博客于 3 年前

Gradle学习笔记(三)管理依赖

概述依赖管理是Gradle最耀眼的特点之一。最佳情况下,你需要做的仅仅是在构建文件中添加一行代码,Gradle将会从远程仓库下载依赖,确保你的项目能够使用依赖中的类。Gradle甚至可以做得更多。如果你的项目中有一个依赖,并且其有自己的依赖,那么Gradle将会处理并解决这些问题。这些依赖中的依赖,被称之为传递依赖。一、依赖仓库一个依赖仓库可以被看作是文件的集合。Gradle默认情况下没有为你的项目
原创
307阅读
0评论
0点赞
发布博客于 3 年前

Gradle学习笔记(二)自定义构建基础

一、配置Manifest文件我们可以直接通过构建文件而不是manifest文件来配置applicationId、minSdkVersion、targetSdkVersion、versionCode和versionName。另外,下面一些属性也是我们可以操控的:testApplicationId: 针对 instrument测试APK的applicationId testInstrumentat
原创
349阅读
0评论
0点赞
发布博客于 3 年前

Gradle学习笔记(一)基本配置

简介Gradle构建脚本的书写没有基于传统的XML文件,而是基于Groovy的领域专用语言(DSL)。Groovy是一种基于Java虚拟机的动态语言。Gradle团队认为,基于动态语言的DSL语言与Ant或者任何基于XML的构建系统相比,优势都十分显著。一、Gradle基础1、构建生命周期一个Gradle的构建通常有如下三个阶段。初始化:项目实例会在该阶段被创建。如果
原创
531阅读
0评论
0点赞
发布博客于 3 年前

Android官方架构组件:Lifecycle详解&原理分析

概述在过去的谷歌IO大会上,Google官方向我们推出了Android Architecture Components,其中谈到Android组件处理生命周期的问题,向我们介绍了Handling Lifecycles。同时,如何利用android.arch.lifecycle包提供的类来控制数据、监听器等的 lifecycle。同时,LiveData与ViewModel的 lifecy
原创
24106阅读
23评论
14点赞
发布博客于 3 年前

解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析

前言随着RxJava及RxAndroid的逐渐推广,使用者越来越多,但是有一个问题,RxJava的使用不当极有可能会导致内存泄漏。 比如,使用RxJava发布一个订阅后,当Activity被finish,此时订阅逻辑还未完成,如果没有及时取消订阅,就会导致Activity无法被回收,从而引发内存泄漏。目前网上对RxJava的内存泄漏有几种方案:1、通过封装,手动为RxJava...
原创
8644阅读
11评论
6点赞
发布博客于 4 年前

理解RxJava(四)Subject用法及原理分析

概述本文将尽可能将RxJava中的Subject相关类的用法做一个阐述,并对其原理进行简单的解析。说到Subject,很多人可能都不是很熟悉它,因为相对于RxJava的Observable、Schedulers、Subscribes等关键字来讲,它抛头露面的场合似乎很少。事实上,Subject作用是很大的,借用官方的解释,Subject在同一时间内,既可以作为Observable,也可以作为Obse
原创
6121阅读
0评论
0点赞
发布博客于 4 年前

Gradle Permission denied解决方案

今天在查看Android项目中三方库的依赖关系时,发现蜜汁好用的gradle命令权限被限制了:qingmeideMac-mini:FireProtectionClient_Android qing.mei$ ./gradlew -q app:dependencies//注意这行,被提示没有权限-bash: ./gradlew: Permission denied最后在 stacko
原创
21071阅读
2评论
4点赞
发布博客于 4 年前

理解RxJava(三)线程调度原理分析

概述在我的上一篇文章 《理解RxJava(二)操作符流程原理分析》 中,分析了依靠多个操作符链式调用的原理。简单总结如下: 1.创建:订阅前,每一步都生成对应的Observable对象,中间的每一步都将上游的Observable存储; 2.订阅: 每一步都会生成对应的Observer对上一步生成并存储的Observable进行订阅。订阅的执行顺序是由下到上的。 3.执行:先执行每一步
原创
2707阅读
0评论
1点赞
发布博客于 4 年前

理解RxJava(二)操作符流程原理分析

概述在我的上一篇文章《理解RxJava(一)基本流程源码分析》 中,通过Observable.create().subscribe()的原理进行了简单的分析。今天尝试对多个操作符的链式调用进行分析,示例代码: @Test public void test() throws Exception { Observable.create((ObservableOnSubsc
原创
1122阅读
2评论
2点赞
发布博客于 4 年前

理解RxJava(一)基本流程源码分析

随便说点什么 最近一直没有机会,好好写博客,可能还是太浮躁了,自己对自己的这种状态也不是特别满意。近几日准备安下心来,好好研究一下RxJava,把这期间的所得总结成一个系列,尽量都写博客中,看看这个阶段结束时自己能达到怎么样的程度。概述在日常的Android项目开发中,RxJava+Retrofit是一个万金油网络请求框架,通常情况下,我们的代码大概是这样的: public void requ
原创
1387阅读
1评论
1点赞
发布博客于 4 年前

Android单元测试:测试RxJava的同步及异步操作

简述在您开发的项目中,您使用了RxJava+Retrofit的网络请求框架,在RxJava强大的操作符下,您理所当然的认为您已经能够游刃有余地处理Android客户端开发中的联网请求需求,比如这样://Model层的网络请求public class HomeModel extends BaseModel<ServiceManager> implements HomeContract.Model {
原创
5610阅读
1评论
0点赞
发布博客于 4 年前

Android单元测试:使用本地数据测试Retrofit

简述在日常项目开发中,基本没有什么机会用到Kotlin,几个月前学习的语法,基本上都忘光了,于是自己强迫自己在写Demo中使用Kotlin,同时,在目前开发的项目中开了一个测试分支,用来补全之前没有写的测试代码。环境配置1.MockAPI单元测试中使用真实开发环境中的真实数据是不明智的,最好的方式是用本地的数据模拟网络请求,比如说我们有这样一个API,联网library我们
原创
2961阅读
0评论
0点赞
发布博客于 4 年前

Android TextView关于android:ellipsize=end的一个bug

疑惑今天在开发过程中遇到一个神奇的bug:需求很明确,TextView配置了关键的以下两行属性: <TextView android:id="@+id/tv_content" android:lay
原创
7670阅读
0评论
3点赞
发布博客于 4 年前

Android RxCache原理解析

RxCache相对于其它Android缓存库相比,入门难度较大,原因之一就是因为语言的不同,加上原文档本身内容就晦涩难懂,笔者也尝试直接翻译,但对于刚接触该库的开发者来说仍然有不低的门槛。近日又翻了翻源码,对RxCache略有所得,尝试在源码级上将RxCache这个库进行一次深入的解剖。
原创
1035阅读
0评论
1点赞
发布博客于 4 年前

Java代理模式分析总结

动机学习动机来源于RxCache,在研究这个库的源码时,被这个库的设计思路吸引了,该库的原理就是通过动态代理和Dagger的依赖注入,实现Android移动端Retrofit的缓存功能。既然在项目中尝试使用这个库,当然要从设计的角度思考作者的思路,动态代理必然涉及到Java的反射,既然是反射,性能当然会有所降低,那么是否有更好的思路呢,使用动态代理的优势有哪些?关于动态代理,百度上面的资料数不胜数,
原创
409阅读
0评论
1点赞
发布博客于 4 年前

Android RxActivityResult:优雅的方式实现startActivityForResult

发现最近在研究VictorAlbertos大神的RxCache库时,发现了他的另外一个库:RxActivityResult。这个库顾名思义,就是将Android中的startActivityForResult()事件转换为Rx事件流,我花了一点时间看了看并且去尝试了一下,发现效果比想象中的还要好。今天笔者简单介绍下这个库的使用,并且分析下这个库的价值。常规写法我们首先来看常规代码我们如何实现Acti
原创
2594阅读
0评论
1点赞
发布博客于 4 年前

Android RxCache使用详解

前言我为什么使用这个库?事实上Android开发中缓存功能的实现选择有很多种,File缓存,SP缓存,或者数据库缓存,当然还有一些简单的库/工具类,比如github上的这个:【ASimpleCache】:a simple cache for android and java但是都不是很好用(虽然可能学习成本比较低,因为它使用起来相对简单),我可能需要很多的静态常量来作为key存储缓存数据value,
原创
5702阅读
8评论
1点赞
发布博客于 4 年前

RxCache中文文档

RxCache官方文档翻译本文翻译自:RxCache官方GitHub地址 版本号:RxCache 1.8.1-2.x 欢迎转载,转发请注明文章来源 http://write.blog.csdn.net/mdeditor#!postId=78056742 @却把清梅嗅中文文档已发布GitHub,详情请点击RxCache基本使用方法、Demo请参阅笔者的另一篇文章:RxCache使用详解本库的 目标
翻译
7368阅读
4评论
1点赞
发布博客于 4 年前

Android TextView部分文字实现点击事件

前言项目中遇到这样一个需求,很简单,就是让TextView中的部分文字实现可以点击跳转的逻辑,大概是这样: 这种需求很简单,脑海里却突然没有了思路,简单Google一下就搜索到了,原来Android的TextView中早已为开发人员提供好了这样的API: SpannableStringBuilder.class This is the class for text whose cont
原创
24423阅读
12评论
7点赞
发布博客于 4 年前

Android 自定义底部上拉控件的实现

前言又到了新的一月,今天提供一个Android自定义底部上拉布局的实现,起因是自己在项目中需要实现这样一个控件,干脆自己写一个练练手。写完了觉得能想到的需求都基本有了(可能会有其它需求,不过基本上改吧改吧就行了),又花了一点时间直接放到了Github上托管,希望能给您一些参考价值:SlideBottomLayout-Android 简单易上手的Android底部上拉控件先看一下实现效果:分析一下这种
原创
5139阅读
4评论
1点赞
发布博客于 4 年前

告别Dagger2模板代码:DaggerAndroid原理解析

概述距离我的上一篇文章打破Dagger2使用窘境:Dagger-Android使用详解发布以来,有幸收获了一些朋友的认可,我很开心。在上一篇文章中,我简单叙述了Dagger2这个库目前在Android开发中的一些短板,为什么我们学习Dagger-Android这个拓展库,以及如何使用这个拓展库。今天我们进行代码分析,看看Dagger-Android是如何基于Dagger2实现一行代码实现所有同类组件
原创
5715阅读
10评论
8点赞
发布博客于 4 年前

告别Dagger2模板代码:Dagger Android使用详解

概述,学Dagger2-Android的理由Dagger2的窘境在使用Dagger2进行Android开发时,不可避免的问题是我们需要实例化一些Android系统的类,比如Activity或者Fragment。最理想的情况是Dagger能够创建所有需要依赖注入的对象,但事实上,我们不得不在容器的声明周期中声明这样的代码:public class FrombulationActivity extend
原创
20522阅读
49评论
16点赞
发布博客于 4 年前

Android 单元测试 Mockito使用详解

简介什么是mock测试,什么是mock对象?先来看看下面这个示例:从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例。一种替代方案就是使用mocks 从图中可以清晰的看出 mock对象就是在调试期间用来作为真实对象的替代品。 mock测试就是在测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试。用四个字简单概括,
原创
8348阅读
4评论
1点赞
发布博客于 4 年前

Java8 HashMap源码分析

概述相比较Java7中的链表组合存储,Java8中的HashMap有了大量改进,最为明显的就是Java8中采用数组+链表+红黑树的方式对元素进行存储,这样安全和功能性完备的情况下让其速度更快,同时减少了哈希冲突的情况。HashMap的主结构类似于一个数组,添加值时通过key确定储存位置.每个位置是一个Node(图中黑点)的数据结构,该结构可组成链表.当发生冲突时,相同hash值的键值对会组成链表.
原创
1128阅读
0评论
0点赞
发布博客于 4 年前

Java8 LinkedList源码分析

学习动机Java Collection库中有三类:List,Queue,Set;而List接口,有三个子实现类:ArrayList,Vector,LinkedList。LinkedList采用的双向链表结构,和ArrayList的数组结构不同,链表结构的优势就是便于大量的数据添加和删除,但对于ArrayList擅长的数据查询则并非擅长。本文进行LinkedList源码的分析。构
原创
746阅读
0评论
0点赞
发布博客于 4 年前

Android工具类: 基于Zxing的二维码生成和展示

前言Android日常开发中,不可避免遇到二维码开发的需求,本文抛开扫描解析二维码,提供一下生成二维码的思路,和封装好的工具类,很简单实现二维码生成和展示。注意:本文二维码生成基于著名的二维码库:Zxing v3.2.1所以你需要先添加Zxing的Jar包 在Gradle中添加对Zxing的依赖如果你觉得看一篇文章太麻烦,请直接跳到文章末尾,按说明,轻松实现二维码解析&生成需求基本上有这几种:生成
原创
1886阅读
3评论
1点赞
发布博客于 4 年前