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大的操作时是写在本地方法里面(这个在游戏开发上会牵扯到很多)还是有别的方法.....等等等等。

                                                                                  ——只为留下点东西

猜你喜欢

转载自792881908-qq-com.iteye.com/blog/1666366