実行中タスク毎のCPU及びメモリ使用率を取得する方法について

2,725 views
Skip to first unread message

mimi

unread,
Jun 24, 2011, 3:20:02 AM6/24/11
to 日本Androidの会
お世話になります。
Androidアプリ開発勉強中のmimiと申します。

現在、業務と勉強を兼ねて、Androidのバージョン2.1以上で動作する
タスク管理アプリを作成しようとしています。
その中で、実行中タスク一覧を表示するために、
以下の情報を取得したいと考えていますが、
なかなかうまく取得できる方法が見つからずに困っています。

現在の状況は、下記の通りです。

※情報として取得したい内容
アプリケーション名、パッケージ名、アプリケーションアイコン、タスクごとのCPU使用率、メモリ使用量

実行中タスクはActivityManagerクラスのgetRunningTasksメソッドで
ActivityManager.RunningTaskInfoを取得すればよいと考えていましたが、
RunningTaskInfoからは、タスク毎のCPU及びメモリ使用率を取得するメソッドは無いように思われます。

また、別の方法として、ActivityManagerクラスのgetRunningAppProcessesメソッドで
RunningAppProcessInfoを取得し、そこから得られるプロセスIDを用いれば、
プロセス毎のメモリ使用率、CPU使用率を取得できるらしいこともわかりました。
ただし、あくまでもプロセス単位であることと、
実行中タスクだけでなくバックグラウンドのサービスも同列に取得できてしまうようなので、
どうやって実行中タスクだけを抽出すればよいのか分からない状態です。
RunningAppProcessInfoのimportanceで判断すればよいのでしょうか。

ちなみに、プロセス単位でのメモリ使用量、CPU使用率は
以下の方法で取得できそうだと考えています。
1)ActivityManagerクラスのgetProcessMemoryInfoメソッドで
android.os.Debug.MemoryInfoを取得し、
getTotalPssメソッドでメモリ使用量を求める。
2) Runtime.getRuntime().execメソッドでOSのtopコマンドを実行し、
プロセスごとのCPU利用率を求める。

以上、長文申し訳ありませんが、
実行中タスク毎のCPU及びメモリ使用率を取得する方法について、
良い方法をご存知の方がおられましたら、
ご教授いただければ幸いです。

よろしくお願い致します。

ohisamallc

unread,
Jun 26, 2011, 7:36:59 PM6/26/11
to android-g...@googlegroups.com
山形のohisamaです。
山形は、雨です。
がんばろう山形。

Anmemという、タスクキラーをリリースしてます。
android1.6しか、知りませんが、
android.os.Debug.MemoryInfoと言う、都合の良い
関数があるとは、知りませんでした。

android.os.Debug.MemoryInfoの、どのプロパティを
使えば良いかは、タスクをキルして、メモリの増え方
を見れば、当たりがつくと思います。

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られ

> います。
> このグループに投稿するには、android-g...@googlegroups.com にメール

> 送信してください。
> このグループから退会するには、
> android-group-j...@googlegroups.com にメールを送信してくださ

> 。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja

> らこのグループにアクセスしてください。
>
>
>

mimi

unread,
Jun 27, 2011, 1:07:21 AM6/27/11
to 日本Androidの会
返信ありがとうございます。mimiです。

当方でも、いくつかタスクキラーをインストールしてみて
動作を比較してみたのですが、
それぞれ、タスク一覧の取得結果やメモリ使用量測定値などに
若干違いがあり、
android.os.Debug.MemoryInfoから取得した
様々なプロパティから得られるメモリ使用量と比較しても
差が出てしまいます。
また、ohisama様のおっしゃるようにタスクKill前後のメモリの増え方を調べても、
既存のタスクキラーアプリと必ずしも一致しません。
色々な方法があるということなのでしょうか。
個人的には、ドコモのGALAXY S に標準装備されているタスクマネージャと
同等の結果を得たいと思っています(現在の業務の要件でもあるので)。

また、今のままでは、
タスク一覧はActivityManagerクラスのgetRunningTasksメソッド、
メモリ使用量はActivityManagerクラスのgetProcessMemoryInfoメソッド、
CPU使用率はRuntime.getRuntime().execメソッドでOSのtopコマンド、
という3段階になりかねない状況で、おそらくそれぞれのデータの突合せに
パッケージ名などを用いることになってしまいますが、
これでは処理が冗長になってしまうため、
何とか少ないロジック量で機能を実現させたいところです。

以上を踏まえた上で、効率よく正確な情報を得られる方法がありましたら、
ご教授いただけると幸いです。
(毎度、長文となってしまい申し訳ありません)
> > らこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

ohisamallc

unread,
Jun 27, 2011, 7:32:25 PM6/27/11
to android-g...@googlegroups.com
山形のohisamaです。
山形は、今日も雨です。
がんばろう東北。

android.os.Debug.MemoryInfoの実装を
試みましたが、挫折しました。
android1.6には、getProcessMemoryInfoが
ありません。2.0からの様です。

タスク一覧からパケージ名とプロセスID取得して
メモリ使用量、CPU使用率は、プロセスIDから
でしょう。

CPU使用量の考察
 動的に変わるので、2~3秒毎にリフレッシュ
 とかしないと意味とか見出せないと思うが。

Reply all
Reply to author
Forward
0 new messages