Androidサービスの2つの使い方bindServiceとstartServiceの使い方
2916 ワード
では、なぜサービスを使うのか、サービスはスレッドをよりよく管理するためであることを初歩的に理解しています.考えてみてください.activityで新しいThreadを起動すると、新しいスレッドで時間のかかる操作を実行します.activityが破棄された後、スレッドを任意に実行する必要がある場合もあります.しかし、この場合、スレッドの参照が失われ、スレッドを制御することはできません.サービスを利用すれば、activityが破棄されても、サービスと連絡を取ることができれば、スレッドを効率的に制御することができます.
ライフサイクルの違い:
1、startService方式は比較的簡単で、contextを呼び出すだけです.startService(intent)メソッドを使用すると、サービスが開始され、サービスが実行されます.
@Override
public int onStartCommand(Intent intent, int flags, int startId)
もちろんIntentは簡単なデータをサービスに伝えるために使用することができ、このコールバックで必要な一連の時間のかかる操作を実行することができます.
必要な操作が完了したら、contextのstopServiceを実行してサービスを終了したり、サービスでstopSelf()メソッドを呼び出して自身を終了したりすることができます.
stopメソッドは、サービスの実行を終了し、サービスを破棄します.
2、bindServiceを使用してcontextにサービスをバインドする場合、実行することサービスの
public IBinder onBind(Intent intent)
この方法はIBinderオブジェクトを返します.このオブジェクトはcontextとインタラクティブに使用され、サービスで実行する操作をこの方法で実現することができます.
我々のcontextでは、バインドサービスはサービスインタフェースを実装するオブジェクトを転送する必要があります.このオブジェクトは、サービスとのつながりを確立するのに役立ちます.
context.bindService(intent,new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
LocalBinder localBinder=(LocalBinder)iBinder;// iBinder LocalBinder
localBinder.setServiceConnection(this);//service ServiceConnection , service
localBinder.setOnBindcontext(mWXSDKInstance.getContext());//service context, service
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
});
,BIND_AUTO_CREATE);
ここでのLocalBinderは、IBinderを継承するサービスに定義された内部クラスであり、public IBinder onBind(Intent intent)で返されるのは、このLocalBinderのオブジェクトであり、LocalBinderを媒介として、サービスとほとんど対話することができます.
public class LocalBinder extends Binder{
// ,
public UpdateService setServiceConnection(ServiceConnection connection){
return UpdateService.this;
}
public void setServiceConnection(ServiceConnection connection){
UpdateService.this.setServiceConnection(connection);
}
public void setOnBindcontext(Context context){
UpdateService.this.setOnBindCOntext(context);
}
}
public IBinder onBind(Intent intent) {
....
return localBinder;
}
サービス内の操作が完了すると、サービスをバインド解除する必要があります.contextのunbindSerciceメソッドを呼び出してバインド解除を行います.このメソッドが呼び出されると、対応するサービス内のonUnbindメソッドが実行され、このコールバックでいくつかの操作を実行できます.
参考記事:Android Serviceの2つの起動方法の詳細(まとめ版)https://blog.csdn.net/imxiangzi/article/details/76039978