CoderBao Blog

长风破浪会有时,直挂云帆济沧海

Dagger 2 思路学习

引言 本文是在熟悉 Dagger 2 用法的基础上,解读 Dagger 2 的生成代码,根据代码来说明官方文档中的有些约定、概念的起源,暂不研究如何生成代码的 compiler 部分。 框架与注解 现在有很多框架均借助于注解和注解处理工具,如 大名鼎鼎的 Butterknife、Dagger 2、Retrofit ,或者是在 Java 代码之外补充完善元数据,或者是把注解当作一种标记来...

2016年度总结

2016年,是我转行成为一名程序员后的第二年。在这一年里,经历过不少反思,相比较于2014年初入社会时的学生气,我的精神面貌上有了很大的变化。 明白了这些道理 Be professional!这一点体现在以下几方面: 给任务划分优先级 提高执行力 及时反馈/追踪,推动任务闭环 及时将心得体会输出为文档/做笔记 ...

Git技巧之添加远程仓库

因为经常在 Win10 和 Ubuntu 之间切换作业,以后可能还有苹果机,同一个项目的代码需要在修改后快捷地同步到另一个设备上。网盘、云同步、GitHub 等使用体验受网速、服务商的影响常常不稳定(如近期的360云盘关闭事件),免费的午餐不长久,私以为当下备份数据最稳妥的方式还是放到自己的硬盘上。作为程序员,我们可以利用 Git 来达成目标。 大体思路是: 将一份干净的代码放到硬...

Android内存泄漏总结

TL;DR:本文将介绍 Android 中内存泄漏的原理,分析若干内存泄漏的例子,总结编码中的最佳实践,并介绍相关的内存分析工具。 Java 内存泄漏 Java 中的自动内存管理机制让我们不需要手动处理内存的分配和回收(参见我的博文《深入理解Java 虚拟机》读书笔记),我们只要释放不需要的对象的引用,虚拟机就会自动回收该对象。 在 Java 中,内存泄漏就是存在一些可达但无用的对象...

《深入理解Java 虚拟机》读书笔记

引言 为什么 作为Java/Android 开发工程师的我们 需要了解 JVM 的原理? 因为虚拟机接管了对硬件平台的兼容和对内存等资源的管理工作,但为了达到给所有硬件提供一致的虚拟平台的目的,牺牲了一些与硬件相关的性能特性。如果开发者不了解虚拟机一些技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。 学习总结 GC 的过程: 从 GC Roots 根节点找引用链开始进...

Dagger2使用指南(译)

Dagger2使用指南(译) 本文基于个人对Dagger官方说明文档的翻译,加上个人理解整理而成。 转载请注明出处:http://coderbao.com/2016/08/01/Dagger-User-Guide/ 引言 在程序中,最棒的类往往都是功能实现类,像 BarcodeDecoder(条形码解码器),KoopaPhysicsEngine(某某物理引擎),AudioStream...

代理模式和Java中的动态代理机制

代理模式 定义 为实际对象提供一个代理,以控制对实际对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。(by IBM developerworks) 代理模式的UML图 ![ProxyPattern][images/design-pattern/ProxyPattern.png] 代理类和委托类通常会实现相同的接口,以保证两者能处理相...

Dialog引发的内存泄漏

原文链接: A small leak will sink a great ship 原文作者 : Pierre-Yves Ricau 本文是本人对于 LeakCanary 团队的一篇分析内存泄漏的文章的意译。水平有限,如有不够准确之处,敬请包涵。 主旨:在Lollipop之前的版本,Dialog可能导致内存泄漏。 引言 LeakCanary 提示存在内存泄漏: GC ROOT th...

理解 Java 中的四种引用

垃圾回收(Garbage Collection)机制是Java 区别于C/C++ 的一大特点。Java 让我们无须进行显式的内存管理。 Java 中使用的是引用,而不是指针,这一点有助于垃圾回收: 系统可以分辨出对象的引用和其他类型的数据的不同。系统可以掌控所有被引用的对象,掌控何时清理、如何清理对象占用的内存,且不会出现 难以分辨一个真正的指针和一个可能是指针而实际是一个数值的东西...

ANR学习笔记

ANR Android系统为了防止某些应用会在一段时间内反应迟钝,因而弹出的ANR对话框。 ANR触发条件 5秒内未响应input event,包括key和touch两种事件 10秒内未执行完的BroadcastReceiver 20秒内未执行完的Service,注意:Service也是执行在主线程中。 需要注意ANR的场景 IO,网络,数据库,复杂计算(如bitmap...