サービスの種類
- アプリケーションから開始されたサービス
- ライフサイクル
- onCreate
- onStartCommand
- onCreate
- アプリケーションにバインドされたサービス
- ライフサイクル
- onCreate
- onBind
- onUnbind
- onDestroy
サービスもアクティビティと同様、使うためにはマニフェストへの宣言が必要
バインドされたサービスを実行する
サービスを作る
Binderクラスの実装
サービスが独自のアプリケーション専用であり、クライアントと同じプロセスで実行する場合は、Binder クラスを拡張して onBind() からそのインスタンスを返すことでインターフェースを作成します。 クライアントは Binder を受け取り、それを使用して Binder の実装や
Service で利用できる public メソッドに直接アクセスできます。
Service クラスの onBind を実行時に戻り値になる IBinder の準備である。
public class Service_A extends Service{
public IBinder binder = new ServiceABinder();
public class ServiceABinder extends Binder {
// getService を作って、サービスへアクセスしやすくする
public Service_A getService(){
return Service_A.this;
}
}
}
onBindの実装
bindServiceで実行する
startServiceより引数が多い。インテントだけでなく、サービスコネクションと、バインドのオプションを入力する。サービスコネクションは、バインドされたサービスについての情報をアクティビティ(など)に戻して、後から操作するためのつなぎ役として渡す、というイメージか?(だからコネクションなんだろうが。)
class Activity_A {
ServiceConnection sc = new ServiceConnection(){
public void onServiceConnected(...){}
public void onServiceDisconnected(...){}
}
...(){
...
bindService(this, sc, ...);
...
}
}
ServiceConnectionを実装する
2つの関数(コールバックメソッド)の実装が必要。
- onServiceConnected()
- システムがこれを呼び出して、サービスの onBind() メソッドから返された IBinder を配信します。
- onServiceDisconnected()
- サービスがクラッシュしたり強制終了されたりした場合など、サービスへの接続が予期せず失われたときに、Android システムがこれを呼び出します。 これは、クライアントのアンバウンドの際には呼び出されません。
バインドのオプション
サービスに情報を送る
せっかくバインドされたサービスを作った、ということは情報を送ったりするはず。
サービスから情報を受け取る
せっかくバインドされたサービスを作った、ということは情報を受け取ろうとしているはず。
サービスのバインドを解く
フォアグラウンドでの実行にする
サービスの中で、startForegroundを実行する。bindとunbindの中でセットしてみたが、bindでない場合はどうするんだろう。onCreate と onDestory にでもセットするんだろうか?
最終更新:2017年04月25日 23:52