这是我在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(只有文本)加载数据,一段时间后,一直都是相同的错误。
任何人都知道如何解决它?
非常感谢!
答案 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 )。
最后,优化它们以永久解决问题。