5

現在の空き/使用済み RAM を測定する必要がある Android アプリを作成しています。

このサイトを検索すると、一般的に次の 2 つのアプローチを提案する同様のトピックを持つ複数のスレッドが表示されました。


アプローチ 1:

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
totalMegs = mi.totalMem / 1048576L;  //available since API 16 only

アプローチ 2: /proc/meminfo の解析。

私は両方のアプローチを試しましたが、うまくいくようです。両方の方法から同じ値を取得します。私の問題はSettings -> Apps -> Running、画面の下部に移動すると、空き/使用済み RAM に関する情報であり、これが上記の方法で得られるものとは異なることです。私の疑いでは、Google はキャッシュされたアプリを空きメモリとして報告します。キャッシュされたプロセスを強制終了すると、Google が報告する RAM 使用量はほとんど変化しませんが、私のアプリは、私が殺した実行中のプロセスのサイズに近い量で変化します。

例:

アプローチ 1 出力:

meminfo: avail: 660, total: 821, used: 161

アプローチ 2 の出力:

root@android:/proc # cat meminfo
MemTotal:         840868 kB
MemFree:          548080 kB
Buffers:               0 kB
Cached:           128300 kB
SwapCached:            0 kB
Active:           192052 kB
Inactive:          79816 kB
Active(anon):     157792 kB
Inactive(anon):        0 kB
Active(file):      34260 kB
Inactive(file):    79816 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        143580 kB
Mapped:            67584 kB
Slab:               6736 kB
SReclaimable:       2104 kB
SUnreclaim:         4632 kB
PageTables:         4008 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      420432 kB
Committed_AS:    1606616 kB
VmallocTotal:     122880 kB
VmallocUsed:       20588 kB
VmallocChunk:      77828 kB

MemFree + Cached = 660MB


Android reported RAM usage: 679MB Free, 142MB used.

Android レポートと同じ数値を取得するにはどうすればよいですか?

/proc/meminfo公式の API が存在しないように見えるので、そこから取得する必要があると思います。

4

2 に答える 2

0

高レベルのSettings -> Apps -> Runningには、 と の 2 つのパーティションがusedありfreeます。

しかし、もっとよく見ると、含むだけが;Runningの一部を占めています。used

同様に、ボタンshow cached processes(左上) をクリックすると、(下部) の一部のみを占めることがわかりますfree。もう 1 つの部分は、実際の空きメモリ (つまり、キャッシュされたアプリがない) である必要があります。

問題は、数字が表示されないことです。そして、実際の空きメモリの「部分」からは、あなたが得たものとはまだ少し違うようですproc/meminfo.

于 2014-04-04T13:51:55.853 に答える