現在の空き/使用済み 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 が存在しないように見えるので、そこから取得する必要があると思います。