Ryoと申します。
遅くなりました。お返事ありがとうございます。
発生条件や状況などを調査していたのですが、
以下の内容がわかりました。
・画像処理のため、それなりに大きいサイズのファイルまたは
テンポラリメモリ領域を、取得または開放していると発生する。
(おおよそ2MB以上のファイルを扱ったときに出やすい)
・発生時のjava heapメモリの状態を確認すると、要求サイズ以上の
空き領域があるように見える。
-----
Runtime r = Runtime.getRuntime();
long max = 0, total = 0, free = 0;
int retry_count = 10;
boolean retry_flg = true;
do
{
try
{
Log.d("Read Bitmap","bmImage");
bmImage = BitmapFactory.decodeFile(file.getPath());
retry_flg = false;
}
catch(OutOfMemoryError e)
{
System.err.println("Catched");
// java情報を取得
max = r.maxMemory(); total = r.totalMemory(); free =
r.freeMemory();
Log.e("OutOfMemoryError " , "max=" + max + "B. " + "total="
+ total + "B. " + "free=" + free + "B. " + "used=" + (total - free) +
"B.");
retry_count--;
e.printStackTrace();
// 50msec sleep
f_effect_sleep(50);
System.gc();
// 50msec sleep
f_effect_sleep(50);
if(retry_count == 0)
{
return null;
}
}
} while(retry_flg);
-----
LogCat出力ログの例:
01-24 06:14:22.671: ERROR/OutOfMemory(XXX): max=25165824B.
total=18816992B. free=9734856B. used=9082136B.
上記のコードでOutOfMemoryをキャッチしたときに、変数freeのサイズが
要求サイズより大きいことが確認できました。
java heapメモリに空きはあるのに、確保できないといった状況です。
このような現象の情報をお持ちの方いらっしゃいませんでしょうか?
以上、宜しくお願いいたします。
On 1月19日, 午後4:31, 飯塚康至 <
iiz...@acl-inc.co.jp> wrote:
> こんにちは、飯塚です。
>
> 手抜きですみません。
http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=OutOfM...
>
> ・recycleをつかう
> ・画像を縮小て読み込む
> ・ARGB_4444を使う
>
> といったところだと思います。
>
> 2011年1月19日15:43 Ryo_andorid <
sheena.andr...@gmail.com>:
> 飯塚 康至- 引用テキストを表示しない -
>
> - 引用テキストを表示 -