Serviceとは
ダウンロードなどの処理時に、UI操作を阻害しないようにするため、Activityとは別に動作させることができる。
startService()とbindService()の2種類がある。今回はbindServiceについて記す。
・startService
 Activityが破棄されても、stopSerivceかstopSelfによって明示的に終了するまで続く。
・bindService
 バインドしているActivityがなくなると破棄される。
使い方
Serviceを継承したクラスを作り、クライアント側から呼び出すことで使用できる。
まずクライアント側クラスは以下の通りである。
Mainctivity.java
public class MainActivity extends AppCompatActivity {
    // 起動するServiceのBinder
    BindService.MyBinder binder;
    // ServiceConnectionオブジェクト
    private ServiceConnection conn = new ServiceConnection() {
        // Service接続成功時のCallback
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            binder = (BindService.MyBinder) service;
        }
        // Service異常切断時のCallback
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 起動用Intent
        final Intent intent = new Intent(MainActivity.this, BindService.class);
        /*ServiceをBound状態にする。インスタンスがなければ作成を要請する。
         *また、Serviceと通信するためのIBinderインターフェースはシステムからコピーされたものが渡される。
         */
        bindService(intent, conn, Service.BIND_AUTO_CREATE);
        //バインドを解除する。この時、条件によってはServiceも終了する。
        unbindService(conn);
}
次にService側クラスの基本構造は以下の通りである。
AndroidManifestに登録しなければ使えないので気を付けて頂きたい。
BindService.java
public class BindService extends Service {
    // onBind()で返すBinder
    private MyBinder binder = new MyBinder();
    //最初のbindService呼び出しのみ、システムにIBinderインターフェースを渡すために呼ばれる。
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }
    /*Serviceのインスタンスがない状態で、クライアントがstartServiceまたはbindServiceを呼んだ時に
     *Serviceのインスタンス生成で呼ばれる。すでにインスタンスが存在している場合は呼ばれない。
     */
    @Override
    public void onCreate() {
        super.onCreate();
    }
    /*インドしているクライアントが「全て」いなくなったとき。そのためunbindServiceが呼ばれても、
     *ほかにバインドしているクライアントが存在した場合、onUnbindは呼ばれない。
     */
    @Override
    public boolean onUnbind(Intent intent) {
    }
    //バインドされたクライアントがなくなって、onUnbindが呼ばれたあとに呼ばれる
    @Override
    public void onDestroy() {
    }
}
AndroidManifest.xml
<application
    <service android:name=".BindService"/>
サンプルの実装と結果
本記事では以下の記事のサンプルと同じものを作ってみた。(コードは割愛)
http://javait.hatenablog.com/entry/2015/12/15/235135
困ったところ
AndroidManifestへの登録を忘れていたが、それ以外は特になかった。
感想
参考サイトには使わなかったメソッドもあったので、またの機会に使ってみたい。
参考URL
サンプル
http://javait.hatenablog.com/entry/2015/12/15/235135
Serviceの詳しい説明
http://ria10.hatenablog.com/entry/20121110/1352537601
