2016-09-13 4 views
-1

私はアンドロイドに新しいですし、私のアプリは時々outOfMemoryExceptionという結果に終わりました。したがって、私はどのくらいのRAMが私のアプリを使用して確認し、それを減らそうとする必要があります。私のアプリに必要なラムサイズの大きさを知るには?

つの質問:

  1. 私のアプリを使用しているRAMサイズを知る方法は?
  2. 通常、アプリのラムサイズの安全しきい値はoutOfMemoryExceptionにならないのですか?

ありがとうございました!

+0

ここには良い説明があります:http://stackoverflow.com/questions/2630158/detect-application-heap-size-in-android/9428660#9428660 – Ironman

+0

「OutOfMemory Exception」を取得するタイミングはいつですか? 'ImageView'でイメージをロードしようとすると、この' Exception'が出ますか? – LearnPainLess

+0

奇妙なことですが、不思議なことに、エミュレータで実行しているときに 'OutOfMemory Exception'を取得することはほとんどありませんが、電話で実行しているときは常にOutOfMemory Exceptionを取得します。あなたのアプリの – Einsambr

答えて

1

Androidスタジオの内蔵memory monitorをチェックしてください。あなたは Androidのモニターの下に見つけること>

を監視し、問題の第二部のために、あなたはActivtyManagerクラスのgetMemoryClass()メソッドを使用することができます。 android doc ..

現在のデバイスのおおよそのアプリケーションごとのメモリクラスを返します。これは、全体的なシステムを最適に動作させるためにアプリケーションに課すべきメモリの限界を知ることができます。返される値はメガバイト単位です。ベースラインのAndroidメモリクラスは16です(これらのデバイスのJavaヒープ上限になります)。より多くのメモリを持つデバイスの中には、24以上の数値を返すものもあります。

0

イメージサイズが使用可能なメモリよりも小さいことを確認してから、読み込みを試みます。したがって、OutOfMemoryExceptionを処理する最も効率的な方法は、例外を避けるために大量のデータをメモリにロードしようとしないようにアプリケーションをアーキテクチャすることです。

メモリに画像をロードする前に私のアプリを使用しているRAMのサイズを知るために

Bitmap original = BitmapFactory.decodeStream(getAssets().open("1024x768.jpg")); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
original.compress(Bitmap.CompressFormat.PNG, 100, out); 
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 

Log.e("Original dimensions", original.getWidth()+" "+original.getHeight()); 
Log.e("Compressed dimensions", decoded.getWidth()+" "+decoded.getHeight()); 
0

1.Howを使用して画像を圧縮? この質問は非常に答えにくいです。異なるタイプのアプリでは異なるメモリが必要です。

2.通常、outOfMemoryExceptionが発生しないように、アプリのRAMサイズの安全なしきい値は何ですか? デバイスごとに異なるしきい値があります。通常は

Runtime rt=Runtime.getRuntime(); 
long maxMemory=rt.maxMemory(); 
Log.i("maxMemory:",Long.toString(maxMemory/(1024*1024))); 

を使用して、使用できるmaxMemoryのサイズを確認してください。しかし、これは正確ではありません。

関連する問題