サービス
とりあえず Directions については別途確認という事にして経路の検索をした後でナビゲーションを行なえるという前提の元、バックグラウンドで現在位置な情報を取得するためのナニを調査。
とりあえずサンプルとして
を参考にしてみました。KitchenTImer.zip をオトして中身を見てみたんですが、ぐぎょぐぎょ感満点。てか、Android のサービスの知識が皆無だったりしますが (を
で
手書きでクラス図とかを書いたりなんかしても微妙だったんですが、なんとなく理解できたので以下にまとめを。
# 微妙ですが
- onCreate() にて Service のサブクラスを渡して Intent を生成
- その Intent を startService() に渡してサービス開始
- Service のサブクラスの ACTION 属性 (?) を渡して IntentFilter を生成
- BroadcastReciever と IntentFilter なオブジェクトを渡して resiterReceiver() 手続きを呼び出す
- ここまでがサービス開始なナニ
- これで、Service のサブクラスが sendBroadcast() したら BroadcastReceiver なサブクラスの onReceive() が通知を受けとる事ができるはず
Bind
_サービスにバインド_と簡単に書いてますが、そうする事で
// サービスにバインド Intent intent = new Intent(this, KitchenTimerService.class); bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
serviceConnection オブジェクトの onServiceConnected() なメソドが呼び出されて Main な Activity のサブクラスの属性である kitchenTimerService にオブジェクトが格納される模様。
private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { kitchenTimerService = ((KitchenTimerService.KitchenTimerBinder)service).getService(); }
この Binder なサブクラスについては KitchenTimerService クラスの定義の中で、以下な定義になっております。
public class KitchenTimerService extends Service { class KitchenTimerBinder extends Binder { KitchenTimerService getService() { return KitchenTimerService.this; } }
だんだん自分で書いててワケワカになってきた。(わら
要点のみ
ええと、現時点で整理できてるのは、というと、ってコトでメモってるソレを以下に箇条書き。若干限界気味なので、明日日中に整理させて下さひ。(弱
- ServiceConnection#getServiceConnected() が KitchenTimerBinder#getService() を呼び出す
- Main の Button の onClick() で KitchenTimerService#schedule() を呼び出している
- その後、moveTaskToBack() を呼び出している
- Activity は background になる?
- その後、moveTaskToBack() を呼び出している
- KitchenTimerService#schedule() で作られる TimerTask#run() での sendBroadcast() って?
- KitchenTimerReceiver#onReceive() がメセジを受け取る
- KitchenTImerService#onBind() が KitchenTimerBinder なオブジェクトを戻す?
- ServiceConnection#getServiceConnected() が KitchenTimerBinder#getService() 呼び出す
ええと、詳細は明日ってコトで (を