leakcanary

Android进阶——性能优化之内存泄漏和内存抖动的检测及优化措施总结(七)

≡放荡痞女 提交于 2019-12-02 08:53:16
上一篇Android进阶——性能优化之内存管理机制和垃圾回收机制(六)简述了Java内存管理模型、内存分配、内存回收的机制的相关知识,相信对于内存溢出也有了稍深的了解和体会,这一篇将从检测、解决内存泄漏进行总结。 一、Java的引用概述 通过A能调用并访问到B,那就说明A持有B的引用,或A就是B的引用。比如 Object obj = new Object();通过obj能操作Object对象,因此obj是Object的引用;假如obj是类Test中的一个成员变量,因此我们可以使用test.obj的方式来访问Object类对象的成员Test持有一个Object对象的引用。GC过程与对象的引用类型是密切相关的,Java1.2对引用的分类Strong reference(强引用), SoftReference(软引用), WeakReference(弱引用), PhatomReference(虚引用)。 软/弱引用技术可以用来实现高速缓冲器:首先定义一个HashMap,保存软引用对象。 private Map <String, SoftReference<Bitmap>> imageCache = new HashMap <String, SoftReference<Bitmap>> (); 再来定义一个方法,保存Bitmap的软引用到HashMap。 public void

Leakcanary原理浅析

烈酒焚心 提交于 2019-12-01 04:56:15
LeakCanary是Android内存泄漏的框架,作为一个“面试常见问题”它一定有值得学习的地方,今天就好好学习一下它。作为一名开发,我觉得给人讲框架或者库的原理,最好先把大概思路给读者讲一下,这样读者后面理解会按照这个框架往里填内容,理解起来也更容易一些,所以我先把LeakCanary的大致原理放出来: 其思路大致为:监听Activity生命周期->onDestroy以后延迟5秒判断Activity有没有被回收->如果没有回收,调用GC,再此判断是否回收,如果还没回收,则内存泄露了,反之,没有泄露。 下面开始按这个思路分析源码,直接从入口开始: public static RefWatcher install(Application application) { return refWatcher(application).listenerServiceClass(DisplayLeakService.class) .excludedRefs(AndroidExcludedRefs.createAppDefaults().build()) .buildAndInstall(); } builder模式构建了一个RefWatcher对象, listenerServiceClass() 方法绑定了一个后台服务 DisplayLeakService

Anonymous Listener of volley request causing memory leak

我们两清 提交于 2019-11-30 20:04:36
I am using volley library for making web-services call. I made a general class for making all web services call and making service call from there and made anonymous listener for successful and error response. But when I use leak canary it is showing memory leak related to context. Below is my snippet of code: public void sendRequest(final int url, final Context context, final ResponseListener responseListener, final Map<String, String> params) { StringRequest stringRequest; if (isNetworkAvailable(context)) { stringRequest = new StringRequest(methodType, actualURL + appendUrl, new Listener

Anonymous Listener of volley request causing memory leak

时光毁灭记忆、已成空白 提交于 2019-11-30 03:59:21
问题 I am using volley library for making web-services call. I made a general class for making all web services call and making service call from there and made anonymous listener for successful and error response. But when I use leak canary it is showing memory leak related to context. Below is my snippet of code: public void sendRequest(final int url, final Context context, final ResponseListener responseListener, final Map<String, String> params) { StringRequest stringRequest; if

SharedElement and custom EnterTransition causes memory leak

走远了吗. 提交于 2019-11-29 09:32:07
问题 Having a shared element animation and also a custom enter animation causes the activity to leak. Any idea what might be the cause? 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * com.feeln.android.activity.MovieDetailActivity has leaked: 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * GC ROOT android.app.ActivityThread$ApplicationThread.this$0 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.app.ActivityThread.mActivities

[转]探索 Android 内存优化方法

喜夏-厌秋 提交于 2019-11-27 21:58:25
前言 这篇文章的内容是我回顾和再学习 Android 内存优化的过程中整理出来的,整理的目的是让我自己对 Android 内存优化相关知识的认识更全面一些,分享的目的是希望大家也能从这些知识中得到一些启发。 Android 应用运行在 ART 环境上,ART 是基于 JVM 优化而来的,ART 优化的目标就是为了让 Android 应用能更高效地在 Android 平台运行。 不严谨地说,Android 应用就是一个在 Android 平台运行良好的 Java 程序,承载着 Android 应用的 ActivityThread 同样有 main 方法。 因此只有了解了 Java 的内存管理机制,才能更好地理解 Android 的内存管理机制,如果你对这一块还不熟悉的话,可以看我的上一篇文章 《 Java 内存管理机制 》。 本文的内容可分为下面两部分,大家可以根据自己的需要选择性地阅读。 第一部分 讲的是 Android 内存管理机制相关的一些知识,包括 Dalvik 虚拟机和 ART 环境等。 第二部分 讲的是内存问题的解决与优化方法,包括 Memory Profiler、LeakCanary 工具的使用方法。 1. 为什么要做内存优化? 内存优化能让应用挂得少、活得好和活得久 。 挂得少 “挂”指的是 Crash,假如一个满分的应用是 100 分,那么一个会 Crash

微信 Android 终端内存优化实践

非 Y 不嫁゛ 提交于 2019-11-27 09:11:44
前言 内存问题是软件领域的经典问题,平时藏得很深,在出现问题之前没太多征兆。而一旦爆发问题,问题来源的多样、不易重现、现场信息少、难以定位等困难,就会让人头疼不已。 微信在过去 N 多的版本迭代中,经历了各式各样的内存问题,这些问题包括但不限于 Activity 的泄漏、Cursor 未关闭、线程的过度使用、无节制的创建缓存、以及某个 so 库悄无声息一点点的泄漏内存,等等。有些问题甚至曾倒逼着我们改变了微信的架构(2.x 时代 webview 内核泄露催生了微信多进程架构的改变)。时至今日微信依然偶尔会受到内存问题的挑战,在持续不断的版本迭代中,总会有新的问题被引入并潜藏着。 在解决各种问的过程中,我们积累了一些相对有效和多面的优化手段及工具,从监控上报到开发阶段的测试检查,为预防和解决问题提供帮助,并还在不断的持续改进。本文打算介绍一下这些工程上的优化实践经验,希望对大家有一些参考价值。 Activity 泄露检测 Activity 泄漏,即因为各种原因导致 Activity 被生命周期远比该 Activity 长的对象直接或间接以强引用持有,导致在此期间 Activity 无法被 GC 机制回收的问题。与其他对象泄漏相比,Android 上的 Activity 一方面提供了与系统交互的 Context,另一方面也是用户与 App 交互的承载者

android十大开源框架

人盡茶涼 提交于 2019-11-26 13:59:24
1-1 课程导学 第2章 Okhttp网络库深入解析和相关面试题分析 本章主要先通过分析OKhttp的简单使用,对于OKhttp的调度器、拦截器、缓存策略、连接池等进行了相应的源码和原理分析,并对于socket、websocket、http缓存、多线程下载、文件下载、https等经典Android面试题进行分析。 2-1 okhttp框架流程分析 2-2 okhttp同步请求方法 2-3 okhttp异步请求方法 2-4 okhttp同步请求流程和源码分析 2-5 okhttp异步请求流程和源码分析-1 2-6 okhttp异步请求流程和源码分析-2 2-7 okhttp任务调度核心类dispatcher解析-1 2-8 okhttp任务调度核心类dispatcher解析-2 2-9 okhttp拦截器流程 2-10 okhttp拦截器链介绍 2-11 okhttp之RetryAndFollowUpInterceptor解析 2-12 okhttp之BridgeInterceptor解析 2-13 okhttp缓存策略源码分析:put方法 2-14 okhttp缓存策略源码分析:get方法 2-15 okhttp拦截器之CacheInterceptor解析 2-16 okhttp拦截器之ConnectInterceptor解析-1 2-17