咕咚

因为热爱

LeakCanary 工作原理浅析

LeakCanary 是 Square 公司为 Android 开发者提供的用于在开发期检测内存泄漏的神器,本文简单分析一下LeakCanary 具体的检测原理。

Activity 与 Window、PhoneWindow、DecorView 之间的关系简述

该篇文章主要探究 Android 中 Activity 与 Window、PhoneWindow、DecorView 之间的关系。Activity 的概念都比较熟悉,但是 Window、PhoneWindow、DecorView 这几个类并不常用,所以很多时候就忽略了它们的具体作用。其实在 Activity 的背后,它们都发挥着非常重要的作用,比如下文即将要说到的 setContentView() 原理、事件分发源头都可以看到这几个概念。

关于线程池的执行原则及配置参数详解

『线程池的构造参数怎么可以这么多?』

在软件开发中,池一直都是一种非常优秀的设计思想,通过建立池可以有效的利用系统资源,节约系统性能。Java 中的线程池就是一种非常好的实现,从 JDK 1.5 开始 Java 提供了一个线程工厂 Executors 用来生成线程池,通过 Executors 可以方便的生成不同类型的线程池。但是要更好的理解使用线程池,就需要了解线程池的配置参数意义以及线程池的具体工作机制。

自定义复杂 View 以及相关绘制优化实践

墨迹天气是一款免费的天气信息查询软件,由于要展示各种各样的数据信息,所以项目中有大量的涉及到图表相关的自定义 View,如展示 24 小时的温度曲线图、潮汐图等等。这里就简单分享一些自己在开发空气质量页面时,开发逐小时预报曲线的一些经验。 版权声明:本文为 咕咚 原创文章,可以随意转载,但必须在明确位置注明出处。 作者博客地址: http://gudong.name 本文...

Android 多状态加载布局的开发 Tips

『多状态布局开发的点点滴滴』

本文将结合自己的项目开发实践,简单分享一下关于多状态 Layout 的开发实践 Tips。

漫谈 JVM 内存分代、垃圾回收

关于 JVM 内存模型以及垃圾回收的文章网上很多,自己以前也看过很多,但是却从来也没有系统的去了解学习过,这次正巧看到一本讲解 JVM 的好书 - 周志明老师的《深入理解 Java 虚拟机》,然后就花了点时间,认真系统的学习了一遍。 这篇主要简单分享一下关于 JVM 内存模型、内存溢出、内存分代、以及垃圾回收算法的相关知识。当然在原书中,这几部分作者都花了不少篇幅去讲解。如果这篇文章让你对...

如何用好 github 中的 watch、star、fork

在每个 github 项目的右上角,都有三个按钮,分别是 watch、star、fork,但是有些刚开始使用 github 的同学,可能对这三个按钮的使用却不怎么了解,包括一开始使用 github 的我也是如此。这篇博客,结合自己的理解和使用,说说这三个按钮的用法以及一些个人见解。 如下图所示这是我们经常看到的三个按钮。 从左至右,依次是 watch star fork,下面分别说下...

JVM 内存区域介绍

作者博客地址: http://gudong.name 本文博客地址: http://gudong.name/2017/04/18/jvm_memery_area.html Java 虚拟机在执行 Java 程序的过程中,会把它所管理的内存划分为5个不同的数据区域。这些区域都有各自的用途,以及创建、销毁的时间,有的区域空间随着虚拟机进程的启动而分配,有些区域则是依赖用户线程,他...

JVM、Dalvik、ART 介绍

该篇文章主要分享记录一下自己对 Java 虚拟机这个概念以及 Dalvik 虚拟机的理解,同时也会对他们做一个简单的对比。对于 Java 虚拟机自己也在不断学习认识中,如果有什么描述有误的地方,欢迎指正。 虚拟机 从一开始学 Java,我们就知道,我们写的所有的 Java 代码最终都会被编译器编译为以 .class 结尾的字节码文件,然后最终被 Java 虚拟机执行,从而得到我们想要的...

仅使用一张资源图片为 View 设置具有按下效果的背景 - OneDrawable

该篇文章主要分享介绍,如何使用一张资源图片为 View 设置具有按下效果的 Background Drawable. 开源地址 OneDrawable 缘起 前段时间在开发项目新版本的过程中,设计师出了一套项目的按下效果规范。规范大概是这样的。 对于一般的按钮,按钮按下的效果只有两种不同的实现。 1、按下后将前置背景图片变暗,具体就是在正常状态的 drawable 上面增加一层...

Android 项目开发清单

良好的开始是成功的一半,对于一个 Android 项目更是,一个好的项目基础架构可以对项目的后续发展有至关重要的作用。所以我们在项目开发之初,应该花费一些时间去调研、设计符合自己项目的基础架构。而且从项目长远的发展来看,这些时间花的非常值得。 下面就从项目的方方面面出发,介绍一下自己搭建项目时的一些经验。当然个人水平经历有限,自己的分享可能有片面性和不足性,欢迎指正补足。 代码质量保证 ...

关于易剪 - 手机端的剪报助手

易剪是自己为了解决个人在手机上阅读文章时而开发的一个收集笔记内容的 Android 工具 App,核心功能就是帮助用户在移动设备上快速剪贴自己感兴趣的文章片段。 下载 Fir 下载地址 酷安市场-易剪 开发缘由 当我们在手机上阅读文章时,对于自己感兴趣的片段,我们可能会想粘贴到便签或者印象笔记作为自己的笔记,方便日后查阅。 类似的场景就像小时候读作文时,经常在旁边放一个小本子,看...

Android 6.0 设备上自定义文本操作栏

该篇文章主要讲解 Android 6.0 设备上自定义文本操作栏。 通过以下文章你会学习到以下几点。 什么是 Android 设备上的文本操作栏 如何在 Android 6.0 设备上为自己的 App 自定义文本操作 首先说说什么是 Android 设备上的文本操作栏。 文本操作栏 我们在平时使用手机的过程中,总是避免不了去操作一些文本,比如常见的复制、粘贴等功能。 ...

使用 Android 原生 API 开发设置界面

算是 17 年第一篇文章,初衷就是简单介绍下用 xml 配置设置界面,为自定义设置界面 UI 做一个铺垫。 场景介绍 为了更好的用户体验,现在的大多数的应用都会提供一个设置界面,供用户去设置一些应用属性,比如用户名、昵称等信息的修改,或者还会有一些消息开关等都会在设置界面中完成。如下所示就是一个常见的设置界面截图(from 咕咚翻译) 类似这样的设置界面在一个应用中都会或多或少的存...

Mac 上修改按键映射工具推荐

去年不知什么时候,自己 Mac 上的 G 键坏了,一开始只是不灵敏,到后来直接失效。很无奈,所以一开始去了苹果店,但是工作人员告诉我,是物理键损坏,只能换键盘,我问换键盘多少钱,3000 。。。 好吧,我还是回来了。 后来自己试着用软键盘解决了这儿问题,但是体验还是相当差啊, 你需要在打 G 的时候,用鼠标去屏幕软键盘选择 G 别提多麻烦了。不过到目前为止,我已经这样干快5个月了。说...

再见 2016 ,你好 2017 ~

不知不觉,就已经 2017 了,时间飞快,2016 很短暂,但是却很丰富,却也不想重来。 在 16 年三月时我最终离开了我的上家公司,尽管离开的过程有点不愉快,但是离开是一个 2016 做的第一个正确的决定。 同时也是在三月初,我发布了自己开发的咕咚翻译,一个划词翻译 App,从一开始推出就得到了很多同行的支持,自己在这个过程中也认识了一个非设计专业的 UI 设计爱好者,他帮我完成了咕咚...

ReView 一个辅助设计师方便 review UI 的 view 组件集合

ReView 是一个用于帮助程序员、设计师方便查看字体大小以及颜色等属性的 View 组件集合, 这篇文章简单介绍一下 ReView 的开发初衷及用途。 问题 在日常开发过程,程序员一般都需要根据设计师的设计图以及标注图来进行 UI 开发,一般来说,设计师往往会在标注图上标注清楚每个 View 的大小以及字体颜色等等属性,我们开发者需要严格按照设计师的标注进行界面开发。 开发完成后,设...

Android 复杂界面开发实践之 ViewController: 介绍

本人博客地址 http://gudong.name 本文简书地址:http://www.jianshu.com/p/e70c1478cd9e ViewController 是一种界面开发组件化的实现方式,利用它可以将一些复杂的 UI 界面开发组件化, 从而更好的组织代码结构,从而提高开发效率,降低维护成本。 ...

Android 复杂界面开发实践之 ViewController: 前言

本人博客地址 http://gudong.name 本文简书地址:http://www.jianshu.com/p/e3f86d5a4474 首先说明的是 ViewControler 并不是 Android 中存在的一个组件,而是在技术实践中总结创造出的一个开发理念,这是一种业务开发过程中的 UI 模块化思想的...