当前位置:编程学习 > wap >>

关于listview 和cursoradapter中遇到的问题,导致内存溢出,列表很卡!求大侠帮指点!

界面 滑动的时候 非常卡 而且还有内存溢出的错误,请问有大侠知道该怎么解决么?
  我想知道 是不是和我查询的数据有关?
  ItemListCursor = dbHelper.getData(sql, null);
itemPageAdapter = new LVItemPageAdapter(this, ItemListCursor);
lvAddOrder.setAdapter(itemPageAdapter);
这里的sql要查的数据很多,我的疑问在于内存里是只存我显示的界面的数据 还是把查询的数据都存了?
我获取的有数据的cursor和sql有关么? 
在界面向上滑动 和向下滑动 有什么区别么? 为什么我在向上滑动的时候会频繁报 内存溢出的错误??

滑动次数越多 越卡? 大侠们 帮我分析下 是什么原因导致的? 是不是内存加载了不需要的数据 而且一直在积累? --------------------编程问答-------------------- 来个大虾给点提示 建议呗 --------------------编程问答-------------------- 沉的太快了 顶起来等高手!!! --------------------编程问答-------------------- 问题是你提供的背景太简单,别人没法给你建议。
从现象上,你自己也分析出来了问题所在。
要解决问题,你只能是检查adapter里的问题。其实我也在为类似的问题发呆 --------------------编程问答-------------------- public class LVItemPageAdapter extends CursorAdapter {
private LayoutInflater mInflater;
int mark = 1;
private Boolean ischeckes = false;


public LVItemPageAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
this.mInflater = LayoutInflater.from(context);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub

LVItemHolder holder = (LVItemHolder) view.getTag();

if (holder == null) {
holder = new LVItemHolder();
holder.tvItemCode = (TextView) view.findViewById(R.id.tvCode);
holder.tvItemName = (TextView) view.findViewById(R.id.tvName);
holder.tvItemSize = (TextView) view.findViewById(R.id.tvSize);
holder.tvItemPrice = (TextView) view.findViewById(R.id.tvPrice);
holder.ivItemLook = (Button) view.findViewById(R.id.button);
holder.cbItemAdd = (CheckBox) view.findViewById(R.id.cbAdd);
holder.tvItemMark = (TextView) view.findViewById(R.id.tvMark);
view.setTag(holder);
}
holder.ItemID = id;
holder.tvItemMark.setText(id);
holder.tvItemMark.setVisibility(View.INVISIBLE);
holder.tvItemCode.setText(cursor.getString(cursor.getColumnIndex("cCode")));
holder.tvItemName.setText(cursor.getString(cursor.getColumnIndex("cName")));
holder.tvItemPrice.setText("¥" + cursor.getString(cursor.getColumnIndex("mStdPr")));

// 设置已点菜品勾挑效果
if (selectedItem.isExists(id)) {
holder.cbItemAdd.setChecked(true);
holder.checked=true;
} else {
holder.cbItemAdd.setChecked(false);
holder.checked=false;
}

holder.cbItemAdd.setOnCheckedChangeListener(isccl);

holder.ivItemLook.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

// TODO Auto-generated method stub

LinearLayout ll = (LinearLayout) v.getParent();
cb = (CheckBox) ll.findViewById(R.id.cbAdd);
TextView tv1  = (TextView) ll.findViewById(R.id.tvCode);
TextView tv2  = (TextView) ll.findViewById(R.id.tvName);
TextView tv3  = (TextView) ll.findViewById(R.id.tvPrice);
// TextView tv4  = (TextView) ll.findViewById(R.id.tvSize);


ischeckes = cb.isChecked();
codeText = (String) tv1.getText();
nameText = (String) tv2.getText();
priceText = (String) tv3.getText();
// sizeText = (String) tv4.getText();


Intent intent = new Intent();
Bundle bundle = new Bundle();

bundle.putString("code", codeText);
bundle.putString("name", nameText);
bundle.putString("price", priceText);
// bundle.putByteArray("pic", bytes);
bundle.putBoolean("ischeck", ischeckes);

intent.putExtras(bundle);
intent.setClass(getApplicationContext(), server_add_order_look.class);
startActivityForResult(intent, 0);

}
});
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// TODO Auto-generated method stub
System.out.println("new view-------------------" + cursor.getColumnIndex("_id"));
return mInflater.inflate(R.layout.server_add_order_listview_item, null);
}

}
这是adapter 的代码,感觉 没什么问题啊  标准代码一样,都是这么用的啊 为什么就会卡的不行呢? --------------------编程问答-------------------- 是不是数据库连接忘了关掉了  --------------------编程问答-------------------- 我也怀疑是哪里没关掉数据库 --------------------编程问答-------------------- 05-11 13:32:35.109: D/Cursor(3380): skip_rows row 35
05-11 13:32:35.129: E/CursorWindow(3380): need to grow: mSize = 1048576, size = 224786, freeSpace() = 197760, numRows = 21
05-11 13:32:35.129: E/CursorWindow(3380): not growing since there are already 21 row(s), max size 1048576
05-11 13:32:35.129: E/Cursor(3380): Failed allocating 224786 bytes for blob at 55,9
05-11 13:32:35.129: D/Cursor(3380): finish_program_and_get_row_count row 7

05-11 13:32:35.219: D/Cursor(3380): skip_rows row 34
05-11 13:32:35.239: E/CursorWindow(3380): need to grow: mSize = 1048576, size = 224786, freeSpace() = 140440, numRows = 22
05-11 13:32:35.239: E/CursorWindow(3380): not growing since there are already 22 row(s), max size 1048576
05-11 13:32:35.239: E/Cursor(3380): Failed allocating 224786 bytes for blob at 55,9
05-11 13:32:35.249: D/Cursor(3380): finish_program_and_get_row_count row 7

05-11 13:32:35.339: D/Cursor(3380): skip_rows row 33
05-11 13:32:35.359: E/CursorWindow(3380): need to grow: mSize = 1048576, size = 224786, freeSpace() = 98582, numRows = 23
05-11 13:32:35.359: E/CursorWindow(3380): not growing since there are already 23 row(s), max size 1048576
05-11 13:32:35.369: E/Cursor(3380): Failed allocating 224786 bytes for blob at 55,9
05-11 13:32:35.369: D/Cursor(3380): finish_program_and_get_row_count row 7

05-11 13:32:35.399: D/Cursor(3380): skip_rows row 32
05-11 13:32:35.429: E/CursorWindow(3380): need to grow: mSize = 1048576, size = 224786, freeSpace() = 18327, numRows = 24
05-11 13:32:35.429: E/CursorWindow(3380): not growing since there are already 24 row(s), max size 1048576
05-11 13:32:35.429: E/Cursor(3380): Failed allocating 224786 bytes for blob at 55,9
05-11 13:32:35.429: D/Cursor(3380): finish_program_and_get_row_count row 7
奇怪的问题是每次向上滑动一次就报一次上面的错误,向下滑动就不出现该错误!!
这是为什么呢? --------------------编程问答-------------------- 别沉啊,在线等各种高手指点~~ --------------------编程问答-------------------- 找到解决方案了吗?!!  我也遇到这个问题 --------------------编程问答--------------------

http://blog.csdn.net/zimo2013/article/details/10263339


LoaderManager管理Loader实现异步动态加载数据
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,