アーカイブ

‘Service’ タグのついている投稿

[android] AIDLによるプロセス間通信 – Callback編

2009 年 7 月 20 日 コメント 9 件

前回に続いてAIDLのお話です。今回はCallbackしてみます。

流れとしては、

  1. ActivityでServiceをBind
  2. ServiceのCallback登録Interfaceをコール
  3. Serviceに実装したCallback登録Interfaceで、受け取ったCallback情報をリストに登録
  4. Callbackリストを参照して登録されているCallback Interfaceをコール
  5. Activityに実装したCallback Interfaceでなんかする

みたいな感じです。

図にするとこんな感じ。

2009072001
続きを読む…

[android] AIDLによるプロセス間通信

2009 年 7 月 18 日 コメント 6 件

タイトルにあるとおり、Activity – Service間の通信のお話です。

andoridでは、簡単にActivityからServiceのメソッドを実行することができます。

  1. AIDLファイルにIPCのインターフェイスを記述する
  2. Serviceにインターフェイスを実装する
  3. ActivityからServiceにBindし、インターフェイスを叩く

たったこれだけです。

サンプルとして、テキストボックスに入力された値をServiceで加算するプログラムを作ってみます。
こんな感じ。
2009071812

続きを読む…

[android] Serviceプロセスの永続性は保証されていない?

2009 年 7 月 5 日 コメントはありません

androidはユーザがアプリプロセスの終了を意識しない作りとなっています。
戻るボタンやホームボタンを押すとホーム画面に戻り、不要となったアプリプロセスはOSがテキトーなタイミングで殺します。
OSに殺されたくないときはServiceを作ってあげれば良いのですが、OSが勝手にServiceプロセスを再起動することがあるっぽいです。

Serviceでタイマーを仕掛けて周期的に処理を行っていたのですが、この周期的な処理が途切れてしまう現象が発生しました。
DDMSでプロセスをチェックしてみると、なんとタイマースレッドが死んでました ?(^o^)/

onCreate(), onStart(), onDestroy()にログを仕掛けて放置してみると、何も操作していないのにonCreate()がコールされてる・・・。
しかも、元のServiceプロセスのonDestroy()や新しいServiceプロセスのonStart()はなしです。
android:process属性を設定して別プロセスにしてみましたが、あえなくお亡くなりに。

まとめると以下のような感じ。

  1. ServiceプロセスはOSが再起動することがある。
  2. Serviceプロセスの再起動時には、新しいプロセスのonCreate()のみが呼ばれる。
  3. Serviceプロセスを別プロセスとしても再起動が発生する。

ちなみに、音楽プレイヤーとかのガリガリ動く物は再起動されることはないと思います。
長時間アイドル状態となっているから殺されるのでしょう。