特定のアプリの音量をセットできないかという話-その5

結構、間があいてしまいましたが、別にフェードアウトしたわけではなく、あまりにも時間が取れなかっただけなので、引き続き、プロセスがどうのこうのというのを調べて行こうと思います。

が、プロセスの処理(http://goo.gl/1dglB)を見る前にプロセスってどうにかして見ることができるかを調べてみました。

結論からいうと、ActivityManagerという文字通りActivityを管理するためのクラスがあるのですが、こちらを使えば列挙はできるようになります。プログラム的には、こんな感じ。

ActivityManager mActivityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);

List<ActivityManager.RunningAppProcessInfo> mProcList = mActivityManager.getRunningAppProcesses();

ソースを表示しようとしてもblogでは、毎度うまいこと表示されないので、改行無視で書いてますが、本当にこれだけで現状実行されているプロセスがListとして列挙されます。実に簡単。

プロセス管理的なソフトって、作るの難しいんだろうなと思ってたんだけど、実際はOSにこういう機能があるからそれ使えばどうにかなるのかもね。って思ったり。

 

これで取ってきた情報はこんな感じで表示できます。

SC20110427-004412

1行目は、そのアプリのプロセス名。これはパッケージ名なので、アプリの実際の名前を持ってくるにはPackageManagerのお世話になって、名前を問い合わせないといけないので、ここでは省略。

2行目は、Importanceとlru、Pidをそれぞれ表示しています。

Importanceというのは、IMPORTANCE_FOREGROUND, IMPORTANCE_VISIBLE, IMPORTANCE_SERVICE, IMPORTANCE_BACKGROUND, IMPORTANCE_EMPTYとそれぞれのプロセスの重要度を表す数値です。大体見るとわかると思いますが、最初の値から重要度が高く、EMPTYになるとメモリが少なくなったりして「何か消さないとなー」という状態では真っ先にプロセスを止められてしまうくらいのプロセスになります。

ここらへんは、Android Developersにもドキュメントがあるので、あとでリンク先調べて書きますが調べるのが面倒なわけじゃないです。(読んだことあるしーー)

で、lruっていうのはよくわかってませんが、BACKGROUNDのプロセスがこの値を調整していて、1だったらバックグラウンドで動いてるプロセスだとかなんとか、そんな推測をしています。(もう遅いから英文読むの面倒になってる)

最後のPIDは、文字通りプロセスのIDで、プロセスが起動した順に番号がついていきます。これは、UNIXを使ったことがある人ならなんとなくわかるかと思います。

 

そんなわけで、プロセスを取ってくることはできるんだというのがわかったので、またしばらく調査を続けようと思いますが、その前にいろいろとやることもあるので、また間が開いたらごめんなさい。

広告

About sato_c

小学生の頃にインベーダーゲームやPC-8001やApple][といったものを知ってしまい、それ以降ずーっとゲーム好き。でも、あんまりうまくはありません。 仕事は当初はゲーム関係のプログラムやサウンドをやっていましたが、WEB関係を通ったあと、遊技機関係のプログラムやサウンドをやっています。あまり節操がないのか。 現在はJavaですてきなコードを書けるように勉強中。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。