2012-08-06 40 views
1

了这一点的内存是我在Android日志收到错误,没错,就是:一个字节分配

08-06 12:16:28.763: E/dalvikvm-heap(27065): Out of memory on a 184-byte allocation. 

的“184”依赖,有时是184,有时是24,其他42 ......等等......

我到处寻找,而且这个错误在加载图片的活动中很常见,我的问题是我没有加载图片,而只是文本。 我的活动是一个ListActivity,我从一个数据库(只有文本)加载数据,并在一段时间后,所有的时间相同的错误。

任何人都知道如何解决它?

非常感谢!

+0

你是否在列表适配器中没有优化的情况下膨胀视图? – Gautam 2012-08-06 10:26:20

+0

如何在列表适配器中进行优化?我想知道。谢谢! – zapotec 2012-08-07 06:21:07

+0

查看我的回答 – Gautam 2012-08-07 06:42:16

回答

3

由于您使用的是listActivity,请检查您是否实施了显示为here的优化。

我解决了列表视图中的类似问题通过实现优化

下面是从presentation一些摘录有关优化listAdapter

较慢的方式

public View getView(int position, View convertView, ViewGroup parent) { 
    View item = mInflater.inflate(R.layout.list_item_icon_text, null); 
    ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); 
    ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( 
      (position & 1) == 1 ? mIcon1 : mIcon2); 
    return item; 
} 

正确的方法

public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.item, parent, false); 
    } 
    ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); 
    ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( 
      (position & 1) == 1 ? mIcon1 : mIcon2); 
    return convertView; 
} 

的最佳途径

static class ViewHolder { 
     TextView text; 
     ImageView icon; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item_icon_text, 
        parent, false); 
      holder = new ViewHolder(); 
      holder.text = (TextView) convertView.findViewById(R.id.text); 
      holder.icon = (ImageView) convertView.findViewById(R.id.icon); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.text.setText(DATA[position]); 
     holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); 

     return convertView; 
    } 
+0

谢谢!它帮助了很多!现在我不再有这个问题了! – zapotec 2012-08-07 09:13:26

0

当您尝试执行太长的SQL语句时(例如,您不在查询中使用String[]参数作为变量,但在语句中硬编码它们),您可能会收到OutOfMemory错误。

尝试编辑您的where语句格式为field=?,并在指定的查询参数中指定变量。

看到这个线程:Sqlite Out of Memory when preparing update statement

如果这不是你的情况的问题,比我想不出任何其他与这个小信息。

+0

谢谢,但问题不在于我进行查询时,而是在执行查询后,在列表中的上滚动上下移动后,它的内存不足。我认为是我需要优化列表适配器,但我不知道如何....... – zapotec 2012-08-07 06:23:09

0

在我的情况下,由大尺寸图像问题。我删除了其中一些(暂时用于测试)并解决了问题。请注意,就我而言,问题只是在最低的API级别上尝试应用程序(API 16)。

最后,对它们进行优化以永久解决问题。

相关问题