OOM 是 Android 开发中常见的问题,而内存泄漏往往是罪魁祸首。

为了简单方便的检测内存泄漏,Square 开源了 LeakCanary,它可以实时监测 Activity 是否发生了泄漏,一旦发现就会自动弹出提示及相关的泄漏信息供分析。

本文的目的是试图通过分析 LeakCanary 源码来探讨它的 Activity 泄漏检测机制。

阅读全文 »

类加载机制是 Java 语言的一大亮点,使得 Java 类可以被动态加载到 Java 虚拟机中。

这次我们抛开术语和概念,从例子入手,由浅入深地讲解 Java 的类加载机制。

本文涉及知识点:双亲委托机制、BootstrapClassLoader、ExtClassLoader、AppClassLoader、自定义网络类加载器等

文章涉及代码:
https://github.com/wingjay/HelloJava/blob/master/common/src/classloader/HelloClassLoader.java

阅读全文 »

注解这种语法本身很有意思,当前很多流行库如 DaggerButterKnife等都是基于注解这种语法。

熟练使用注解,既能让你的代码变得简洁易读,动态运行时执行你想要的操作,还能帮你生成代码,省去重复代码写作。

本文涉及知识点:注解的生命周期,代码编辑时注解,编译时注解代码生成,运行时注解动态反射。

阅读全文 »

关于Java反射机制的文章很多,这次换种方式来讲解反射的作用。

本文涉及到的知识点:class.getDeclaredXXX()XXX.getModifiers()method.getReturnType()method.getParameterTypes()method.isAnnotationPresent(XXX.class)Modifier.isStatic(method.getModifiers())constructor.newInstance(XX)

本文涉及代码:
https://github.com/wingjay/HelloJava/blob/master/data-structure/src/reflection/ForArticle.java

阅读全文 »

正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。

本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarrier, FutureTask, Callable 等。

本文涉及代码:
https://github.com/wingjay/HelloJava/blob/master/multi-thread/src/ForArticle.java

阅读全文 »

2016年自己的博客产出并不多,主要原因是自己希望在博客中只分享技术干货,而非泛泛而谈,所以一直克制自己写文的想法。不过这里其实存在一个漏洞,那就是平常的开发过程中并没有那么多的难题要解决,也就导致工作中并不能提供那么多干货素材。因此,我才来重新考虑自己2017年的博客计划和方向。

阅读全文 »

React Native 所代表的跨平台、动态更新技术已经引起了全世界开发者关注,而且这种技术势必会是未来的需求和潮流。React Native 不一定会成功,但至少目前 React Native 已经是这一领域的领跑者。

阅读全文 »