Activityアクセスサービス内部メソッド

4018 ワード

一、サービス起動方式は二つあり、一つはstartService()であり、一つはbindService()であり、両者はライフサイクルが異なる以外に本質的な違いがある.
1、startServiceのプロセスはサービスプロセスであり、bindServiceはフロントまたはバックグラウンドサービスであり、activityと同じプロセスであり、activityが終了するとbindserviceも終了する.
2、bindServiceは起動して、その中に3つのパラメータがあって、第2のパラメータはとても重要で、ServiceConnectedクラス、1つのクラスを作成してこのクラスを継承する時、実現する方法はBindServiceのIbinderインタフェースのオブジェクトにアクセスすることができて、多態を利用して、中の方法にアクセスすることができます;--------bindService()内部エージェントクラスが内部データに間接的にアクセスするように設定します.
一、サービスコード
public class ServiceTest extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        // Binder   return new ZhouMiShu();
    }
    public class ZhouMiShu extends Binder{
        public void QianXian(){
            banZheng();
        }
    }
    public void banZheng(){
        System.out.print(" ");
    }
}
 、 :
public class MainActivity extends AppCompatActivity {
    Intent intent;
    ServiceTest.ZhouMiShu zhouMiShu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intent=new Intent();
        intent.setClass(this, ServiceTest.class);
        bindService(intent, new MyConnection(),BIND_AUTO_CREATE );
    }
    public void click(View view){
       //   zhouMiShu.QianXian();
    }
    class MyConnection implements ServiceConnection {

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // Binder   zhouMiShu= (ServiceTest.ZhouMiShu) service;
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }

}