`
微Smile
  • 浏览: 34860 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

ListView内存泄漏浅析

 
阅读更多


 有关内存泄漏问题:

 

http://www.cnblogs.com/loulijun/archive/2012/04/10/2437888.html

 

http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html

 

异步加载问题:

 

http://www.apkbus.com/android-18525-1-1.html

 

看上面两篇文章,大体可以对listView机制有个比较明确的了解。此外对于listView还得注意个每一项的乱序的问题。因为用优化之后就是重用的view,用ViewHolder之后是重用的view里面的所有组建,所以得注意如何单独控制每一项里面的组件而不引起其他项里面组件的变化。例如:如下图所示:



 

 

listview的每一项中一张图片和三个按钮(分享、播放、删除)。(上面的设置和拍照按钮不属于listview,并且是固定在屏幕上不动的。)现在要求点击播放时不影响其他项目中的播放按钮。

 

我的解决方案:设置了一个字符串数组,然后分别控制数组中每个项目的变化。代码如下:

 

//每次调用GetView时更新播放按钮上的值
holder.btnPlay.setText(btnTexts.get(position));
		
holder.btnPlay.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		Button btn = (Button)v;
		//播放
		if (btn.getText().equals("播放")) {

		          System.out.println("播放");
			btn.setText("暂停");
			btnTexts.set(position, "暂停");//btnText为一个ArrayList<String>.
			function.play(mList.get(position));
		} else {
			System.out.println("暂停");
			btn.setText("播放");
			btnTexts.set(position, "播放");
			function.pause();
		}
			}
		});

 当然,这并不是最好的,只是暂时解决问题而已。网上关于这类问题也有很多解决方案,在此我就不发表浅见了。

 

总之,移动端的开发最核心的问题也是最令人头疼的问题就在于手机的性能问题:

 

电池有限、内存有限、cpu处理能力有限、网络不稳定等等。

 

     在性能优化方面也有很多解决办法,重要的是要学会发现问题,去测试然后再对症下药去解决问题。比如bitmap优化,你在哪里优化,是在每次加载进listview的时候还是在初始化的时候,这中间性能有多大的差异。资源重用时是否有考虑到用单例模式,是否有考虑到用工厂模式;在启用硬件资源时,是在本线程中然后重新开启一个线程去调用;遇到耗cpu大的操作时是写在本地方法里面(这个在游戏开发上会牵扯到很多)还是有别的方法.....等等等等。

 

 

                                                                                  ——只为留下点东西

  • 大小: 10.4 KB
分享到:
评论

相关推荐

    listview 内存溢出的简单解决方案

    然而,由于其特性,如果不合理使用,很容易引发内存溢出(Out Of Memory,OOM)问题,特别是当ListView中包含大量的图片时。本篇文章将深入探讨如何解决ListView中图片过多导致的内存溢出,并通过分析`...

    android listview内存优化

    9. **避免内存泄漏**:注意管理ListView中的动态添加或删除的View,以及监听器的注册和注销,防止泄露导致内存占用持续升高。 10. **适时释放资源**:在ListView不再使用或Activity销毁时,及时释放ListView和...

    快速保存ListView内存中大量数据到Excel

    这个主题“快速保存ListView内存中大量数据到Excel”主要涵盖以下几个关键知识点: 1. **ListView数据管理**:ListView通常与适配器(Adapter)一起使用,如ArrayAdapter或BaseAdapter,适配器负责将数据源(如...

    ListView加载网络图片,防止内存溢出

    在ListView中加载网络图片时,每个ImageView都会加载整个图片到内存,如果图片尺寸过大或数量过多,就可能导致内存占用过多。 解决这个问题的一种常见方法是使用图片加载库,如Picasso、Glide或Fresco。这些库都...

    ListView优化及加载图片时内存溢出

    - **内存泄漏检测**:使用工具如LeakCanary进行内存泄漏检测,确保没有因为ListView或其他组件导致的内存泄漏。 - **及时释放资源**:在ListView项不再可见时,及时释放Bitmap和其他资源,防止内存泄漏。 3. **...

    ListView利用内存缓存异步加载网络大图Demo

    7. **弱引用**:使用WeakReference或者SoftReference来保存Bitmap对象,避免内存泄漏。 DisplayingBitmapDemoV2这个文件很可能是该项目的源代码,通过分析这个代码,你可以看到上述优化策略的具体实现。比如,它...

    使用listview分页显示数据

    分页显示是优化大型数据集显示的重要手段,它可以提高用户体验,避免一次性加载过多数据导致的内存压力和界面卡顿。本资源提供了一个自定义ListView结合分页功能的实践案例,包括代码实现和数据库操作,对于学习和...

    listview下载图片避免内存溢出使用了软引用

    本项目使用了软引用,避免内存溢出,又加了外部存储。

    fmx-listview应用

    6. **性能优化**:在处理大量数据时,`TListView`采用虚拟化技术,只渲染当前屏幕可见的项,从而提高性能并减少内存消耗。 7. **国际化和本地化**:`TListView`支持多语言环境,可以轻松地根据用户的系统设置改变...

    android的listview嵌套listview,列表嵌套列表 android studio版本

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。当需求涉及列表中的每个条目本身也需要展示一个子列表时,我们就会遇到ListView的嵌套问题。本教程将详细讲解如何在Android Studio环境下...

    listview加载更多,并图片异步加载,处理内存溢出

    在这个场景中,我们面临的关键问题是如何实现ListView的高效加载,包括分页加载图片、下拉刷新功能、图片异步加载以及防止内存溢出。下面将详细介绍这些知识点。 1. **ListView的分页加载图片** 在处理大量图片时...

    ListView嵌套ListView全选,多选

    同时,对于嵌套ListView,要考虑性能问题,避免内存和计算资源的过度消耗。 8. **适配器(Adapter)设计**:为了管理嵌套的ListView,可能需要创建两个Adapter,一个用于父级ListView,另一个用于子级ListView。...

    listView嵌套listViewDemo

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。然而,当一个ListView内部需要嵌套另一个ListView时,就会出现一些挑战。标题"listView嵌套listViewDemo"指的是一个示例项目,旨在解决此类...

    最经典的listView优化demo

    然而,如果处理不当,ListView可能会导致性能问题,如滚动卡顿、内存泄漏等。本教程将通过"最经典的listView优化demo",为初学者提供一份详尽的Android ListView适配器优化实践。 首先,我们要理解ListView的工作...

    listView

    7. 内存泄漏:确保在Activity销毁时解除ListView与Adapter的关联,防止内存泄漏。 通过深入理解ListView的工作原理,并结合实际需求进行优化,我们可以创建出高效、用户体验良好的列表界面。同时,了解和使用工具,...

    listView 嵌套 ListView demo

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。然而,有时我们可能需要构建更复杂的界面,比如包含多级分类的数据结构,这时就需要用到ListView的嵌套。"ListView 嵌套 ListView demo"就是...

    listview的checkbox状态保存及内存优化

    1. 避免内存泄漏:当convertView被复用时,要确保不再持有任何可能导致内存泄漏的引用,例如解除对旧数据的监听,或取消不必要的网络请求。 2. 数据适配器复用:如果数据源发生改变,更新Adapter而不是创建新的...

    Android listview嵌套listview

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。然而,有时我们可能需要在一个ListView的项中再嵌套另一个ListView,这被称为ListView的嵌套。这样的设计可以用于展示复杂的数据结构,比如...

    listView嵌套listView

    - 适当地复用子ListView:和父ListView一样,子ListView的视图也应该被复用,以减少内存消耗和提升性能。 - 懒加载:如果子ListView的内容不是一开始就全部显示,可以考虑使用懒加载策略,只在需要时加载子...

    ListView嵌套GridView以及ListVIew嵌套ListVIew

    在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。然而,有时我们的界面设计需要更复杂的布局,比如在一个ListView项中嵌套另一个GridView,或者一个ListView内再嵌套另一个ListView来实现时间轴...

Global site tag (gtag.js) - Google Analytics