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,我从数据库加载数据(只有文本),过了一会儿,总是同样的错误。

谁知道怎么解决??

非常感谢!

4

3 回答 3

3

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

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

以下是有关优化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; 
    }
于 2012-08-07T06:41:47.593 回答
0

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

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

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

如果这不是你的问题,那么我想不出任何其他信息。

于 2012-08-06T10:30:43.873 回答
0

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

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

于 2017-09-27T20:43:04.587 回答