Androidサービスの2つの使い方bindServiceとstartServiceの使い方


  • サービスとマルチスレッドの違い:
  • サービスは依然としてプライマリ・スレッドで実行され、Threadは本当に新しいスレッドを開いて先関操作を実行します.
    では、なぜサービスを使うのか、サービスはスレッドをよりよく管理するためであることを初歩的に理解しています.考えてみてください.activityで新しいThreadを起動すると、新しいスレッドで時間のかかる操作を実行します.activityが破棄された後、スレッドを任意に実行する必要がある場合もあります.しかし、この場合、スレッドの参照が失われ、スレッドを制御することはできません.サービスを利用すれば、activityが破棄されても、サービスと連絡を取ることができれば、スレッドを効率的に制御することができます.
  • bindServiceおよびstartServiceの使用方法:
  • プロジェクトと開発でAndroidのサービスを使用した2つの方法は、サービスを使用するオブジェクトがbindServiceをより多くのインタラクティブに使用する必要があることを区別し、逆にサービスで一連の時間のかかる操作を実行する必要があるだけで、その間にカスタムリスナーインタフェースを設定するなど、頻繁なインタラクションを必要としない場合、startServiceを使用して実装できます.
    ライフサイクルの違い:
    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