2012-09-18 21 views
10

Androidの課題の1つは、さまざまなデバイス仕様(特にデバイスメモリ)です。Androidで利用可能なメモリを確認する

モデルオブジェクトをJavaのSoftReferencesを怠惰な負荷で広く使用するために、VMは、データモデルの現在使用されていない部分を自由に整えて、必要に応じて再構成するだけです。

しかし、実際にはSoftReferencesとの挑戦の1つは、VMがメモリ不足になるまでぶら下がるのではなく、弱く参照されて数秒以内に消去される傾向があるということです。トリミングすることができますが、それはしばしば何も記憶にないことを意味する点でうまく機能しません。理想的には、メモリが豊富なデバイスでは、オブジェクトをメモリに保存することでメリットを享受できます。

結果として、SoftReferencesをLRUメカニズムと組み合わせることが一般的です。ここで、LRUは最近参照されたオブジェクトにハードポインタを保持します。これは、これらのほとんど参照されないオブジェクトのために十分なメモリがあることを前提としているので、理想的ではありません。

また、LRUにとって適切なデフォルトが何であるかを知ることは難しいことです。完璧な世界では

、Androidは(私はおそらく小さなLRUで開始することができ、かつ低メモリコールバックが Aを見つけるにそれをバックオフその後、発生開始まで定期的にそれをぶつけヒントとしてそれはメモリ不足のコールバックの使用します私の経験では、このコールバックは実際のVMメモリの圧力と決して一致しないようです。

データモデルが特定のデバイスで多すぎるメモリを使用していることを誰かが妥当な方法で検出したことはありますか?

+1

「OutOfMemoryException」をカウントしていますか? https://developer.android.com/training/displaying-bitmaps/cache-bitmap.htmlここで使用される 'memClass'は、(静的に)モデルを拡大縮小する方法です。 – zapl

+0

OutOfMemoryErrorsがスローされ始めたら、あなたは基本的にホースしていると思います。しかし、記事へのリンクありがとう。 –

答えて

0

これは機能しますか?

MemoryInfo mi = new MemoryInfo(); 
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
activityManager.getMemoryInfo(mi); 
long availableMegs = mi.availMem/1048576L; 
0

あなたは、Android NDKを使用する場合:あなたは、Androidで利用可能なメモリを決定する場合

#include <unistd.h> 

size_t getTotalSystemMemory() 
{ 
    long pages = sysconf(_SC_PHYS_PAGES); 
    long page_size = sysconf(_SC_PAGE_SIZE); 
    return pages * page_size; 
} 

size_t getFreeSystemMemory() 
{ 
    long pages = sysconf(_SC_AVPHYS_PAGES); 
    long page_size = sysconf(_SC_PAGE_SIZE); 
    return pages * page_size; 
} 

1

を、あなたは 視点で確認するかに行くことができます - > DDMS 2)2番目の点は、メモリアナライザツールを使用して未使用のメモリをチェックインすることができることです。また、メモリの空きがあるかどうかを確認することも可能です( )。

関連する問題