8

私たちのアプリケーションは多くのビットマップを使用しています。たとえば、G1、XOOM では問題なく動作します。しかし、HTC Desire では OutOfMemory エラーが発生します。コードでは、try/catch(OutOfMemoryError e) を使用し、すべてのデバイス (Desire を除く) が例外をスローしますが、HTC は OOM 例外なしでアプリケーションを強制終了します。ビットマップのメモリを 12 Mb に制限したところ、この解決策で問題が解決したように見えましたが、お客様は HTC Desire HD でまだ問題を抱えています。12 Mb の制限があっても OOM があります。ログは次のとおりです。

06-07 12:03:43.978 E/dalvikvm-heap( 29616):1140128-byte external allocation too large for this process. 
06-07 12:03:43.978 E/dalvikvm( 29616):Out of memory: Heap Size=12311KB, Allocated=9420KB, Bitmap Size=12139KB, Limit=21884KB
06-07 12:03:43.978 E/dalvikvm( 29616):Trim info: Footprint=15751KB, Allowed Footprint=15751KB, Trimmed=3440KB
06-07 12:03:43.978 E/GraphicsJNI( 29616):VM won't let us allocate 1140128 bytes

私の知る限り、デバイスにはさまざまなヒープサイズの制限があります(G1:16mb、Droid:24mb、Xoom 48mb)。私の意見では、システムは少なくとも 16 MB を提供する必要がありますが、12 MB の OOM があります。私の質問は次のとおりです: Android 2.* のビットマップに使用できる空きヒープ サイズを確認するにはどうすればよいですか? または、他の方法でそのような問題を回避する方法をアドバイスしてください。参考までに、特に他のデバイスで正常に動作する場合は、ビットマップを減らすことはできません。助けてくれてありがとう!

4

2 に答える 2

2

あなたが試すことができます

Runtime.getRuntime().maxMemory();

またはアクティビティのメソッド

getMemoryInfo(ActivityManager.MemoryInfo;

さらに、アクティビティの

onLowMemory();

このメソッドでは、アクティビティがシャットダウンされる前にメモリの問題が通知されたときに何が起こるかを処理できます。また、Android/Linux メモリの Android 開発者からのこの回答も確認する必要があります。

于 2011-06-07T20:00:04.947 に答える
0

この OutOfMemory 例外は、ファイル自体からではなく、メモリ リークが原因で発生します。onStop、onResume、onDestroy などのアクティビティ ライフサイクル メソッドをオーバーライドしていますか?

于 2012-06-22T17:37:50.537 に答える