内存泄露的检测。

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显示图片时如何防止内存泄露。的更多相关文章

  1. [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载 ...

  2. 在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片

    很多时候,在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片.可以通过以下方式: <img src="xxx.jpg" onError="th ...

  3. 使用FragmentStatePagerAdapter时发现的内存泄露问题

    这篇文章想说的并非是由于使用 FragmentStatePagerAdapter 而导致的内存泄漏,内存泄漏的真正原因和 FragmentStaePagerAdapter 并无直接关联,但是使用 Fr ...

  4. Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能)

    先定义一个结构: TUserInfo = record  UserID: Integer; // 用户编号  UserName: string; // 用户名end; 然后编写如下代码: proced ...

  5. Android训练课程(Android Training) - 高效的显示图片

    高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...

  6. EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题

    在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加  实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...

  7. android tablelayout 显示图片

    当在tablelayout中显示图片时,设置imageView为固定大小时,会出现divide by zero 错误 将LayoutParams 改为 TableRow.LayoutParams即可 ...

  8. Qt 显示图片 放大 缩小 移动(都是QT直接提供的功能)

    本文章原创于www.yafeilinux.com 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一.利 ...

  9. QPixmap显示图片 并 修改图片

    http://hi.baidu.com/eygaqurchnbhsyq/item/2b9624006120f2edff240d42 QPixmap显示图片 现在我们来实现在窗口上显示图片,并学习怎样将 ...

随机推荐

  1. json改造优化无刷新分页

    index.html dd

  2. Ext JS

    官網:http://www.sencha.com/products/extjs/

  3. datagridview 定位到最后一行,定位不准的原因

    C# 写的 winform 程序,定位到最后一行 dgvGoods.FirstDisplayedScrollingRowIndex = dgvGoods.Rows.Count - 1; 测试中发现,一 ...

  4. pd name与comment互换,或者code互换,总之互换

    1 PowerDesigner中批量根据对象的name生成comment的脚本 执行方法:Open PDM -- Tools -- Execute Commands -- Run Script Opt ...

  5. 使用自定义的framework

    1.创建framework工程,创建需要的类将接口暴露在public中

  6. Free git private repo

    今天在网上搜索了一下,发现除了github之外还有很多免费的git server,列表可以见 https://git.wiki.kernel.org/index.php/GitHosting 对比了一 ...

  7. Redis多机常用架构-sentinel

    哨兵经典架构 sentinel结构 哨兵工作原理 Sentinel 通过配置文件发现Master,如下: Sentinel 通过向Master发送 INFO 命令来自动获得所有Slave的地址 跟Ma ...

  8. vs2010的“应用程序向导”新建MFC程序报错“当前页面的脚本发送错误”

    原创文章,欢迎阅读,禁止转载. 问题现象不知道从什么时候开始,我的vs2010不能新建MFC程序了,报错如图:... 解决方法根据提示排查,发现是应用程序向导的相关html被损坏了.从同事电脑上把   ...

  9. JavaScript-navigator_userAgent-编写一段代码能够区分浏览器的主流和区分

    1 userAgent:包含浏览器名称和版本号的字符串 <!DOCTYPE html> <html> <head lang="en"> < ...

  10. STM32移植RT-Thread的串口只能接收一个字节数据的问题

    打开设备的函数参数要与注册设备函数参数要一致, 注册设备的函数及其参数如下: /* register UART1 device */ rt_hw_serial_register(&serial ...