作者归档:heisedeyueya

LeakCanary源码分析第三讲-HeapAnalyzerService详解

前面的两篇文章介绍了LeakCanary的核心架构RefWatcher的工作原理,其核心内容就是查找泄漏对象的最短引用路径,这些工作都是在HeapAnalyzerService中完成的。

HeapAnalyzer

HeapAnalyzerService通过调用HeapAnalyzer的checkForLeak方法来进一步分析内存,使用HAHA将RefWatcher传递过来hprof文件解析成Snapshot对象,其中调用的方法包括SnapshotFactory的parse和HprofIndexBuilder的fill方法。解析得到的SnapShot对象和我们用MAT分析内存得出的对象结构类似,其源码如下:

它构建了一颗对象引用关系树,我们可以在这颗树中查询各个Object的信息,包括Class信息、内存地址、持有的引用以及被持有引用的关系。

继续阅读

百度云加速服务导致SQL以及敏感代码数据提交异常

问题描述

由于我的博客采用百度云加速服务,博客中经常会有敏感代码,和SQL语句需要提交,但是由于云加速服务开启了安全防护策略。导致数据提交异常。如下图 baidu_clound_reject

解决方案

遇到问题之后首先想到的是去百度云加速设置白名单,将自己的IP段加入到白名单,如下图: baidu_waf

抱着见证奇迹的心情我再一次保存文章,还是无法提交。简直崩溃。一气之下我将百度云加速的Web防火墙关闭,再提交就可以了。所以目前找到的方法就是先关闭防火墙提交之后再打开。

Greendao Query and QueryBuilder

greenDao查询(Queries)

Queries帮助你返回entities。你可以使用Raw SQL(原生查询)构造查询,然而使用greenDao的QueryBuilder API才是更加优雅的方式。Queries支持lazy-loading的查询结果。

当处理一个较大的结果集时,lazy-loading(懒加载模式)可以节省内存提高性能。

QueryBuilder

你可以使用QueryBuilder 创建自定义查询,而不用做丑陋的SQL拼接。毕竟不是每一个人都擅长写SQL,并且还容易出错。QueryBuilder使用非常方便,它将你从SQL编写中解脱出来。妈妈再也不用担心写SQL时出现bug了,因为语法检查是在编译时进行的。 继续阅读

通过packageName打开GooglePlay详情页面

在特定的情况下,我们需要通过应用程序的包名直接打开GooglePlay的详情页面,代码如下:

Android5.1 Webview内存泄漏分析

问题现象

Android 5.1 系统,App存在 WebView 泄漏情况,还比较严重。通过内存泄漏分析得到的GC roots引用如下: 每新打开一次WebViewActivity,就会发生就会发生一次Webview实例无法释放,新增一个对象。上图中的两个AppSearchWebView实例,就是由于打开了两次导致。

问题分析 继续阅读