Android性能优化(一)内存泄露优化(静态变量、单例模式、属性动画)
来源:互联网 发布:网页三剑客软件下载 编辑:程序博客网 时间:2024/05/02 00:44
内存泄露优化分为两个方面,一方面是在开发过程中避免写出有内存泄露的代码,另一方面是通过一些分析工具比如 MAT来找出潜在的内存泄露继而解决。
一、静态变量导致内存泄露。一般情况下静态变量引用了或者内部持有Activity导致Activity无法销毁会导致内存泄露。代码如下:
二、单例模式导致内存泄露
Android的单例模式在我们项目开发中经常会用到,不过使用的不恰当的话也会造成内存泄漏。因为单例的静态特性使得单例的生命周期和应用的生命周期一样长, 这就说明了如果一个对象已经不需要使用了,而单例对象还持有该对象的引用,那么这个对象将不能被正常回收,这就导致了内存泄漏。
创建一个单例类AppManager,代码如下
在MainActivity中使用此单例,代码如下:
我们来分析一下,为什么会内存泄漏呢?
AppManager appManager=AppManager.getInstance(this);
这句传入的是Activity的Context,我们都知道,Activty是间接继承于Context的,当这Activity退出时,Activity应该被回收, 但是单例中又持有它的引用,导致Activity回收失败,造成内存泄漏。
为了以防误传Activity的Context , 我们可以修改一下单例的代码,如下:
这样子修改,不管外面传入什么Context,最终都会使用Applicaton的Context,而我们单例的生命周期和应用的一样长,这样就防止了内存泄漏。
三、属性动画导致内存泄露
从 Android3.0开始,Google提供了属性动画,属性动画中有一类无限循环的动画,如果在Activity中播放此类动画且没有在 onDestroy中去停止动画,那么动画会一直播放下去,尽管已经无法在界面上看见动画效果了,并且这个时候 Activity的 View会被动画持有,而View又持有了Activty,最终Activity无法释放。下面的动画是无限动画,会泄露当前的Activity,解决方法是在Activity的onDestroy中调用animator.cancel()来停止动画。
- Android性能优化(一)内存泄露优化(静态变量、单例模式、属性动画)
- Android性能优化-单例所引起的内存泄露
- android性能优化(一)内存优化
- Android性能优化--内存泄露
- Android性能优化实战(三)----避免内存泄露
- 【Android性能优化】(一) Android内存泄露分析
- Android性能优化篇(一),什么是内存泄露
- Android 性能优化(一)内存篇
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- Android内存优化(内存泄露)
- Android性能优化 - 避免内存泄露
- Android性能优化方法和内存泄露
- Android性能优化典例(内存)
- android内存泄露优化
- Android内存泄露优化
- 写日志封装类
- java线程基本概念及实现
- Input.GetAxisRaw 与Input.GetAxis
- whu1608 遍历子集dp
- 知道一个窗口程序的 HWND ,如何等待它完全关闭退出
- Android性能优化(一)内存泄露优化(静态变量、单例模式、属性动画)
- 百度地图点聚合MarkerClusterer,性能优化
- php 杂项函数
- 剑指offer36:数组中的逆序对
- Shell-条件判断
- c++中vector的用法详解
- 关于MBR病毒的一些调研及分析工作
- oracle用户创建及权限设置
- Android Studio使用framework.jar方法