2011年2月9日水曜日

Android アプリ開発、最低ラインは突破

 とりあえず、最低ラインの開発はクリアした。しかし、気になる事がいろいろ出てきて、結局、アプリはサービスとして書き換える予定。サービスに関しては、これから調べる。

 気になった点は、以下。

  • アプリから作成したスレッドは、終了処理をちゃんとしないとゾンビとして残る
  • サービスマネージャから登録したリスナの制御をちゃんとしないと、サービス・リソースが残る

 デバッグしていて、アンドロイドのログ出力を見ると、スレッドが2つある事に気がついた。あちゃー、スレッド終了させるの忘れてたよ…。
 これには、事情がある。Android アプリのイベントで、onDestroy 等はメモリ不足時等の対処で呼び出されない可能性がある。かと言って、バックグラウンドになった時も処理を行いたい場合、onPause や onResume のイベントでスレッドを停止するわけにはいかない。つまり、アプリでバックグラウンド・スレッドを使うのは、詰み筋っぽいのだ。どうやって、このスレッドを殺そうか?と思って、アプリをアンインストールしてみたところ、スレッドを殺すことができた。後で、アプリ設定の中から「強制停止」を実行してもアプリに関連するリソースやスレッドを停止できそうな感触を得ている。
 Android 自体は、アプリが作成したスレッド、アプリが有効にしたリソースを把握しているはずである。しかし、APIレベルでは、これらゾンビ化したスレッドやリソースを再取得したり解放したりする機能がわからなかった。もしかしたら、無いのかもしれない。あるにしても、この辺まで踏み込んだ書籍は、そうそうは無さそうである。
 個人的には、名前つきスレッドをアプリが生成できて、後から取得できるようなAPIが欲しいところである。リソースに関しては、所有権を明確にし、所有者が居なくなれば、さっさと破棄してほしいところだ。ここら辺は、相変わらずJavaのウィークポイントではなかろうか?ブラック・ボックス化されている分、ブラック・ボックスがちゃんと実装されていないと、アプリ側では制御ができずに、糞みたいな思いをする。

0 件のコメント: