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

解决方案 »

  1.   

    问题是你提供的背景太简单,别人没法给你建议。
    从现象上,你自己也分析出来了问题所在。
    要解决问题,你只能是检查adapter里的问题。其实我也在为类似的问题发呆
      

  2.   

    public class LVItemPageAdapter extends CursorAdapter {
    private LayoutInflater mInflater;
    int  = 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 的代码,感觉 没什么问题啊  标准代码一样,都是这么用的啊 为什么就会卡的不行呢?
      

  3.   

    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 705-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 705-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 705-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
    奇怪的问题是每次向上滑动一次就报一次上面的错误,向下滑动就不出现该错误!!
    这是为什么呢?
      

  4.   


    http://blog.csdn.net/zimo2013/article/details/10263339
    LoaderManager管理Loader实现异步动态加载数据