gradlew -q app:dependencies |
centOS常用命令
fresco内存泄漏排查
最近对客户端进行内存泄漏排查,绝大部分内存泄漏的地方都很容易找出来,对着Android Studio分析的结果,一步步点开Depth
为0 的引用,然后Jump to Source
分析分析就行了。
但是有个内存泄漏比较诡异:
mCallerContext in com.facebook.imagepipeline.cache.BitmapMemoryCacheKey |
一个缓存的key居然引用了Activity,对着Depth
为0的引用也找不出有什么异常的地方。然后去看了半天fresco源码分析BitmapMemoryCacheKey
里面Context
的来源,但是传入Context
的地方太多,分析源码的时候突然想到打个断点不就行了。。
思路对了就很简单了,在创建缓存key的地方(getBitmapCacheKey
)打了几个断点,Context
为Activity
的情况下顺着调用栈就找到了泄漏的地方。
找到问题的根源之后又看了下fresco的源码,作为callerContext
传入的Context
都会被静态引用。所以解决办法有两个:
- 所有的
callerContext
只传入ApplicationContext
- 在每个
Activity.onDestroy()
的地方调用clearCache
相关方法cleanCacheForUri()
cleanAllData()
Gradle 依赖最新版本不生效的问题
//主要是配置这个,更改gradle的默认缓存策略 |
Android Studio 调试 Gradle 插件
Posted on
Edited on
命令行到Project ,输入:
GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
./gradlew 你的task --no-daemon -Dorg.gradle.debug=true插件源码打上断点
Eidt Configurations
➜+
➜remote
➜ok
点击
debug
,开始调试
参考:
https://github.com/robolectric/robolectric-gradle-plugin/wiki/Debugging-the-Plugin