内存溢出了,大神帮忙看看

黎书亦 2015-06-18 06:07:19



...全文
278 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小撇儿1992 2015-06-25
  • 打赏
  • 举报
回复
前几天我也在做处理图片导致内存溢出,后来找了个图片缓存的开源库希望对你有帮助 https://github.com/square/picasso
Arnold9009 2015-06-24
  • 打赏
  • 举报
回复
引用 8 楼 piziacai2008 的回复:
这段代码好像不用老是new bitmap,如果是模拟器的话,bitmap多了,内存溢出是很正常的,而且你还是在getview这个方法里,如果列表数据多了,你的bitmap会越来越多,从你的代码看,图片是存在drawable里的,把bitmap删掉,需要显示图片时就setBackgroundResource(),千万别过多使用bitmap。非常占内存
up 不过频繁setBackgroundResource也不太好,会导致频繁gc回收的吧
piziacai2008 2015-06-24
  • 打赏
  • 举报
回复
这段代码好像不用老是new bitmap,如果是模拟器的话,bitmap多了,内存溢出是很正常的,而且你还是在getview这个方法里,如果列表数据多了,你的bitmap会越来越多,从你的代码看,图片是存在drawable里的,把bitmap删掉,需要显示图片时就setBackgroundResource(),千万别过多使用bitmap。非常占内存
ps_ps 2015-06-24
  • 打赏
  • 举报
回复
mBgBitmap2 = minBitmap( R.drawable.null_room); 我不知道你对图片做了什么操作, 但是估计是把图片变小, 这个东西可以叫ux 给你一个图片即可,不要在代码里面操作, list 滑动时岂不是很慢, 个人建议
Hare_ 2015-06-19
  • 打赏
  • 举报
回复
manifest文件的Application节点,配置:android:largeHeap="true"
黎书亦 2015-06-19
  • 打赏
  • 举报
回复
package com.ms.android_ms_bank.adapter; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.ms.android_ms_bank.R; import com.ms.android_ms_bank.entity.RoomStatuts; public class RoomGridAdpter extends BaseAdapter{ Context context; LayoutInflater mInflater; List<RoomStatuts> roomList; public RoomGridAdpter(Context context,List<RoomStatuts> roomList){ this.context=context; mInflater=LayoutInflater.from(context); this.roomList=roomList; } @Override public int getCount() { // TODO Auto-generated method stub return roomList.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return roomList.get(arg0); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } class rgList{ ImageView room_state_logo; TextView room_state,room_number; } public Bitmap minBitmap(int ResourcesId){ //压缩,用于节省BITMAP内存空间--解决BUG的关键步骤 BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 2; //这个的值压缩的倍数(2的整数倍),数值越小,压缩率越小,图片越清晰 //返回原图解码之后的bitmap对象 return BitmapFactory.decodeResource(context.getResources(), ResourcesId, opts); } Bitmap mBgBitmap = null; public static Bitmap mBgBitmap2 =null; @Override public View getView(int arg0, View view, ViewGroup arg2) { // TODO Auto-generated method stub rgList rglist = null; if(view==null){ rglist=new rgList(); view= mInflater.inflate(R.layout.room_grid_item, null); rglist.room_state_logo=(ImageView) view.findViewById(R.id.room_state_logo); rglist.room_state=(TextView) view.findViewById(R.id.room_state); rglist.room_number=(TextView) view.findViewById(R.id.room_number); view.setTag(rglist); }else{ rglist=(rgList) view.getTag(); } rglist.room_state_logo.setImageDrawable(null); rglist.room_number.setText(roomList.get(arg0).getRoomnumber()+""); String roomname=""; switch (roomList.get(arg0).getRoomstatus()) { case 1: mBgBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.null_room_bg); mBgBitmap2 = minBitmap( R.drawable.null_room); view.setBackgroundResource(R.drawable.null_room_bg); rglist.room_state_logo.setImageDrawable(new BitmapDrawable(mBgBitmap2)); roomname="空房"; break; case 2: roomname="带客"; break; case 3: roomname="开房"; break; case 4: roomname = "预结"; break; case 5: mBgBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.payment_room_bg); mBgBitmap2 = minBitmap(R.drawable.payment_room); view.setBackgroundResource(R.drawable.payment_room_bg); rglist.room_state_logo.setImageDrawable(new BitmapDrawable(mBgBitmap2)); roomname="已结"; break; case 6: roomname="预买"; break; case 7: roomname="预买收款"; break; case 8: mBgBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.cleaning_room_bg); mBgBitmap2 = minBitmap( R.drawable.cleaning_room); view.setBackgroundResource(R.drawable.cleaning_room_bg); rglist.room_state_logo.setImageDrawable(new BitmapDrawable(mBgBitmap2)); roomname="洁房"; break; case 9: roomname="锁定"; break; case 10: mBgBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.test_room_bg); mBgBitmap2 = minBitmap( R.drawable.test_room); view.setBackgroundResource(R.drawable.test_room_bg); rglist.room_state_logo.setImageDrawable(new BitmapDrawable(mBgBitmap2)); roomname="测机"; break; case 11: mBgBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.fix_room_bg); mBgBitmap2 = minBitmap( R.drawable.fix_room); view.setBackgroundResource(R.drawable.fix_room_bg); rglist.room_state_logo.setImageDrawable(new BitmapDrawable(mBgBitmap2)); roomname="维修"; break; case 12: roomname="预定锁定"; break; case 13: roomname="呼叫"; break; default: break; } rglist.room_state.setText(roomname); /*System.out.println("我在创建 +++++++++++++++++++++++++"); if(mBgBitmap2 != null && !mBgBitmap2.isRecycled()){ mBgBitmap2.recycle(); mBgBitmap2 = null; System.out.println("我在优化0 +++++++++++++++++++++++++"); } */ return view; } }
黎书亦 2015-06-19
  • 打赏
  • 举报
回复
加分了,求帮忙
黎书亦 2015-06-19
  • 打赏
  • 举报
回复
测过了,一个就是Apapter中的setBackgroudResource()和setImageDrawable导致内存溢出 还有一个就是Adapter中动态生成的Button导致内存溢出 因为我是定时刷新这个adapter所以就导致占用的内存越来越多,最后直接被杀掉程序 求解,怎么办
菜鸟_晧 2015-06-18
  • 打赏
  • 举报
回复
Fragment_Room~ MyAdapter::getView() 好好看下你的getview方法有没有问题。再抓取Hprof 用工具分析一下。
ps_ps 2015-06-18
  • 打赏
  • 举报
回复
oom, 用工具分析log, eclipse 中就有相关的插件, 连上手机, ddms 模式, 运行几次, 就可以看到是什么导致内存泄露了

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧