Android > サービス(Service)

下位ページ

Content


サービスの種類

  • アプリケーションから開始されたサービス
    • ライフサイクル
      • 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