使用ViwePager显示图片时如何防止内存泄露。
内存泄露的检测。
1. 在Android Studio中运行你的应用,然后切换到输出窗口的Android tab。
2. 尽情的玩耍你的应用,最好各个功能都用到,如果是Viewpager,则多滑动一些页面,观察内存的增长情况。
如果是下面这样大致平稳的曲线,就没有内存泄露。

如果是下面这样,阶梯状的曲线,基本是有内存泄露了。图片右上角显示已经分配了178.16M,一旦这个数字超过200M,程序就会崩掉。

如果得知哪些函数耗费了大量内存呢?可以记录内存的使用过程,加以分析,点击内存窗口的Start Allocation Tracking按钮开始记录,使用完再次点击停止记录。

在弹出的记录文件中可以找到使用内存较多的函数调用。这个方法浏览内存使用的情况,不能确定内存泄露的地方。

一点经验:
用FragmentStatePagerAdapter代替FragmentPagerAdapter
前者保证不再显示的页面(Off-Screen page)能够被及时删除,释放掉内存,但是bitmap内存不再此列。
减小bitmap尺寸
使用bitmap是要尽量使用小尺寸的,因为Android中一个bitmap占多大内存是由其尺寸决定的,而不是其所占硬盘空间的大小决定的。比如一个512 * 512的色彩斑斓的图片,一个1024 * 1024的黑白图片,前者所占硬盘空间更大,但是加载到Android中,后者所用内存确是前者的四倍!因为Android是按 1024 * 1024来分配内存,它不管你像素是什么样色。
使用完的bitmap要及时回收内存。
bitmap = null是一句很有用的代码。这样可以不再引用某个对象,加快垃圾回收的进程。
ImageView.setImageDrawable(null)也是脱离对之前设置的位图的引用。急速垃圾回收。
上面这两句放到Activity或者Fragment的onDestroy方法中,有奇效!
小心使用AsyncTask进行异步加载
记得在Activity或者Fragment的onDestroy方法中将AsyncTask的实例置空。否则里面引用的Bitmap内存无法释放!
如果使用ASyncTask匿名对象则可忽略此条。
==
使用ViwePager显示图片时如何防止内存泄露。的更多相关文章
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
- 在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片
很多时候,在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片.可以通过以下方式: <img src="xxx.jpg" onError="th ...
- 使用FragmentStatePagerAdapter时发现的内存泄露问题
这篇文章想说的并非是由于使用 FragmentStatePagerAdapter 而导致的内存泄漏,内存泄漏的真正原因和 FragmentStaePagerAdapter 并无直接关联,但是使用 Fr ...
- Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能)
先定义一个结构: TUserInfo = record UserID: Integer; // 用户编号 UserName: string; // 用户名end; 然后编写如下代码: proced ...
- Android训练课程(Android Training) - 高效的显示图片
高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...
- EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题
在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加 实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...
- android tablelayout 显示图片
当在tablelayout中显示图片时,设置imageView为固定大小时,会出现divide by zero 错误 将LayoutParams 改为 TableRow.LayoutParams即可 ...
- Qt 显示图片 放大 缩小 移动(都是QT直接提供的功能)
本文章原创于www.yafeilinux.com 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一.利 ...
- QPixmap显示图片 并 修改图片
http://hi.baidu.com/eygaqurchnbhsyq/item/2b9624006120f2edff240d42 QPixmap显示图片 现在我们来实现在窗口上显示图片,并学习怎样将 ...
随机推荐
- C#之方法的重载与递归
(1). 方法的重载:方法的名称相同,但参数不同. 1.如果参数的个数相同,那么参数的类型不能相同. 2.如果参数的类型相同,那么参数的个数不能相同. (2).方法的递归:方法自己调用自己.用于找出一 ...
- Forwards on Weibo (30)
BFS,题意比较难懂,是求离query L层的总共人数 #include <stdio.h> #include <string.h> #include <iostream ...
- 【IOS】Xcode7以上免证书真机调试
Xcode7之前,想要真机调试,必须花99刀购买开发者账号,而且步骤繁琐,需要下载证书.随着Xcode7的推出,大幅度的简化了真机调试的步骤,对ios开发工作者和正在学习ios开发的众多码农们,可以说 ...
- rspec中的shared_examples与shared_context有什么不同
What is the real difference between shared_examples and shared_context ? My observations : I can tes ...
- 实验七 Web应用测试
实验目的 (1) 了解Web应用测试的特点 (2) 掌握SSH分层单元测试 实验内容 以下题目均在bookstore项目上完成(请先运行数据库文件): 1.编写单元测试用例,对 ...
- js复制内容加版权声明代码
$("body").on('copy', function (e) { if (typeof window.getSelection == "undefined" ...
- C# 有关打印机的连接判断...随便看看
各位coder手下留情 /// <summary> /// 判断是否连接打印机 /// </summary> public bool CheckPrinter() { //取得 ...
- 微信小程序 设计理念指南
在此处输入标题 微信小程序的几条开发建议 功能简约,场景贴近随用随走: 操作快捷方便,交互简单: 程序本身代码资源等文件大小限制在1MB之内,这是微信目前的硬限制,目的是为了使得最终到达用户设备上 ...
- eclipse开发 javafx(转)
了解过JavaFX的都知道,JavaFX自从2.0版本开始,已经完全抛弃了之前的script语言,才用纯java来实现.这样的好处就是1.让使用Java的IDE进行JavaFX的开发成为可能,2.Ja ...
- emmet插件快捷键:
概念:emmet插件是用在编辑器里面的一个可以快速编写代码的插件,比如sublime text中,就可以用它来快速创建代码,本文主要是在sublime text的编辑器中做的测试代码. 一.html ...