字节分配时内存不足

时间:2012-08-06 10:24:29

标签: android

这是我在Android日志中收到的错误,确切地说是:

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

“184”取决于,有时是184,有时是24,其他42 ......等等。

我到处寻找,这个错误对于加载图片的活动很常见,我的问题是我没有加载图片,只有文本。 我的Activity是一个ListActivity,我从DataBase(只有文本)加载数据,一段时间后,一直都是相同的错误。

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

非常感谢!

3 个答案:

答案 0 :(得分: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; 
    }

答案 1 :(得分:0)

当您尝试执行太长的SQL语句时,有时可能会出现OutOfMemory错误(例如,您不对查询中的变量使用String[]参数,而是在语句中对它们进行硬编码)。

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

请参阅此主题:Sqlite Out of Memory when preparing update statement

如果这不是你的问题,那么我就不会想到这些小信息。

答案 2 :(得分:0)

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

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