1

これは、Android ログで受け取ったエラーです。正確には、次のとおりです。

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

「184」は場合によって、184の場合もあるし、24の場合もあるし、42の場合もある……など……。

私はどこを見ていましたが、このエラーは写真をロードするアクティビティによく見られます。私の問題は、写真ではなくテキストだけをロードしていることです。私のアクティビティは、DataBase(テキストのみ)からデータをロードする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ステートメントを実行しようとすると、OutOfMemoryエラーが発生することがあります(たとえば、String[]クエリで変数の引数を使用せず、ステートメントで変数をハードコーディングします)。

whereステートメントを編集してfield=?フォーマットし、指定されたクエリパラメーターで変数を指定してみてください。

このスレッドを参照してください:更新ステートメントを準備するときにメモリ不足のSqlite

これがあなたの場合の問題ではない場合、私はこの小さな情報で他に何も考えられないよりも。

于 2012-08-06T10:30:43.873 に答える