2011年8月13日土曜日

[Android] 自身をタスクキルするアプリケーションを作るには

How to kill the application's own self

Androidアプリケーションは終了すると、何の処理をしなくてもRAM(メモリー)に残ります。
(終了してもバックグランドで処理を続けるプリケーションもあります)
他のアプリケーションが起動するなど、空きメモリーが必要になったときにOSがRAMから消します。
アプリケーションがRAMに残っていた方が速く起動できるし、バッテリーやフラッシュROMの寿命も長持ちします。

ただ、アプリケーションが終了後もRAMに残ることに不安を覚えるユーザーも少なからずいらっしゃるようです。
そこでActivityを終了したらRAMから消える(タスクキル)サンプルを作ってみました。

ソースです。
Activityのソース用(Main.java) ※パーミッション不要のため、マニフェストは省略

onDestroyメソッドの最後に Process.killProcess(Process.myPid()); を書くだけです。

アプリケーションを起動するとタスクリスト(※)にパッケージ名が表示されます。
(※正式名称は不明ですがここでは「タスクリスト」と呼びます)
一度起動したアプリケーションは、RAMに十分な空き容量があれば終了してもタスクリストから消えないのが普通です。

Process.killProcess(Process.myPid()); が実行されると直ちにタスクリストから消えます。

ちなみにタスクキルすると
INFO/ActivityManager(**): Process jp.fujiu.AndroidApp.ProcessKiller (pid ***) has died.
というログが残ります。異常終了したときと同じ内容なので、あまりいい気分ではありません。
タスクキルのメリットを強いて上げるならメモリーリークを解放してくれるようですが、メモリーリークを起こしているならタスクキルに頼らずコードを直すべきです。
本当にタスクキルするかどうかをユーザーに確認する画面を用意した方がいいと思います。

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿