文档章节

android优化----内存泄漏分析

HzhiBo
 HzhiBo
发布于 2017/07/05 15:07
字数 339
阅读 165
收藏 1

在开发到后期,更多的去维护App的性能和体验。比如app长时间使用带来的卡顿,闪退等原因。今天记录下我刚学习的内存泄漏分析。

内存泄漏:

通俗易懂的来说:就是java虚拟机在回收垃圾,无法回收该垃圾(无用对象)。无论多少内存,迟早会被占光。 在android中常见的就是 生命周期长的对象引用生命周期短的对象。

    常见的静态对象持有Activity

public class SpeechUtils {
    private Context context;

    private static final String TAG="speechUtils";

    private TextToSpeech textToSpeech;
    public static SpeechUtils getInstance(Context context){
        return new SpeechUtils(context);
    }
}

//Activity 实例化SpeechUtils
public class SpeechActivity extends AppCompatActivity implements TextToSpeechBeta.OnInitListener {
    @BindView(R.id.textView)
    EditText textView;
    @BindView(R.id.button2)
    Button button2;
    private SpeechUtils speechUtils;
    private int CODE = 0x01;
    private TextToSpeechBeta mTts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_speech);
        ButterKnife.bind(this);
        speechUtils =SpeechUtils.getInstance(this);
    }
}

分析流程:

采用AS的Monitor工具:

运行APP,针对某一功能重复使用后,点击GC 接着抓取JAVA Heap.

这里写图片描述

然后生成hprof文件,点击右边的Analyzer Tasks 进行分析

点击Leaked Activityes, 可以看到SppechActivity无法回收,展开列表,发现是有一个TextToSpeech占用。

分析问题代码位置:

 

 

© 著作权归作者所有

共有 人打赏支持
HzhiBo
粉丝 8
博文 27
码字总数 21222
作品 0
泉州
Android工程师
私信 提问
Android应用内存泄漏的定位、分析与解决策略

Hello,大家好,我是Clock。翻了一下简书,发现有一个多月没有更新博客,本来今天打算和妹纸去电影院看《你的名字》,然后再去到处浪的。 结果因为妹纸公司临时有事,她不得不回公司一趟......

D_clock爱吃葱花
2018/06/29
0
0
Android内存优化(六)LeakCanary使用详解

相关文章 Android性能优化系列 Java虚拟机系列 1.概述 如果使用MAT来分析内存问题,会有一些难度,并且效率也不是很高,对于一个内存泄漏问题,可能要进行多次排查和对比。 为了能够简单迅速...

刘望舒
2017/09/10
0
0
基于Android Studio的内存泄漏检测与解决全攻略

自 从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclipse,成为主流的 Android开发I...

双鱼座1990
2016/06/20
4.9K
3
一步步拆解 LeakCanary

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 java 源码系列 - 带你读懂 Reference 和 ReferenceQueue https://blog.csdn.net/gdutxiaoxu/article/details/80738581 一步步拆解 ...

xujun9411
2018/07/04
0
0
Android内存泄露与内存溢出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zping0808/article/details/53889115 一、 内存泄漏与内存溢出(OOM) 1. 内存泄露 垃圾回收器无法回收原本应...

_zping
2016/12/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux下端口转发工具rinetd介绍

linux下简单好用的工具rinetd,实现端口映射/转发/重定向,针对TCP协议,不支持UDP。 官网地址 http://www.boutell.com/rinetd 里面介绍及使用齐全。 使用场景举例: 阿里云内网Redis连接问题...

ouhoo
15分钟前
1
0
Oracle学习日志-5(算数运算符,比较运算符和逻辑运算符)

因为有编程基础,所以对于这一章还是很好理解,只需要注意对NULL的运算。 操作的表格 算数运算符 查询商品名字和商品售价,并商品售价乘2 SELECT product_name,sale_price * 2 AS "sale_pri...

白话
27分钟前
1
0
搜索引擎(Lucene介绍、分词器详解)

Lucene介绍 Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简...

这很耳东先生
32分钟前
0
0
quartz详细介绍

quartz常用api Scheduler 调度程序交互的主要API。 Job 希望由调度程序执行的组件实现的接口。 JobDetail 用于定义作业的实例。 JobDataMap 可以包含不限量的序列化数据,在job运行的时候可以...

大笨象会跳舞吧
32分钟前
1
0
kotlin使用jackson序列化enum

默认情况下,我们序列化与反序列化enum是它的name,事实上大部分情况下我们需要序列化的是我们自定义的value,那应该怎么做呢? 这种情况下我们就需要@JsonValue与@JsonCreator data class U...

weidedong
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部