トップ地図アプリMapX > 地図アプリMapX サービス再考

地図アプリMapX サービス再考

AndroidのActivityとService

残念ながら、AndroidのActivityとServiceがまだよく理解できていない。

地図アプリ Map は時々ダウンすることがある。 起動しなせばよいので、個人的使用ではそれほど致命的エラーではない。 しかし、快適に使うためには、このようなことはあってはならない。

バッテリ消費を極力抑えるために、複雑な仕様になっているようである。

Serviceとは

Serviceは分離されたプロセスではない。アプリケーションの一部として、アプリケーションと同じプロセスで実行される。 Serviceはスレッドではない。

Service は Context.startService()または Context.bindService() で呼び出す。 Context.startService()で多重呼び出しを行ってもネストされなく、問題はない。 一度の Context.stopService() または、stopSelf(int)の呼び出しで、サービスは停止する。

ActivityとServiceのデータ共有

地図アプリMapでは、サービスで取得した位置情報を Broadcast を使って Activity に渡している。

しかし、Activity と Service が同一プロセスで動いているのであれば、 Activity と Service でメモリを共有できるのではなかろうか? Service は24時間動いており、 一日分の位置情報はメモリに蓄えられている。わざわざ Broadcast しなくてもよいのではなかろうか?

データは共有できるが、Serviceからある処理が終わったなど何らかの通知が必要になるであろうから、 その通知手段として Broadcast や「通知」を使うのであろうか。

リファレンス

[1] Android Service
[2] Android Service コンポーネントの基本的な使い方