バインドサービス

5211 ワード

/*Googleはandroid 5から要求した.0を開始するには、表示Intentを使用してサービスコンポーネントを起動する必要があります.*起動タイプとバインドタイプの違い:*-起動タイプ:ActivityとServiceは相対的に独立しており、Activityは破棄され、サービスは終了しません.*–ライフサイクル:1つのサービスは1回のみ作成され、破棄されますが、複数回開始できます.*つまり、onCreateメソッドとonDestroyメソッドは1回のみ呼び出され、onStartメソッドは複数回呼び出されます.*バインドタイプ:ActivityとServiceバインド、Activityが終了し、サービスも自動的に破棄されます.*サービスとAvtivity通信*•サービスとAvtivityの間でサービス接続インタフェースを使用して通信する*サービス接続の説明*–サービス接続コールバックインタフェースは、onサービス接続およびonサービスDisconnectedイベントを受信するために使用されます*–bindServiceメソッドが非同期で実行されているため、bindServiceメソッドが戻った後、すぐにサービスのインスタンスを取得することはできません.*onサービス接続イベントに応答する必要があります.このイベントでServiceのインスタンスを取得し、初期化された作業を実行します.*ServiceとAvtivityの通信原理*ActivityはbindServiceメソッドを呼び出し、MyStartServiceオブジェクトの参照を取得します.これにより、ActivityはMyStartServiceのメソッドを直接呼び出すことができます.*/
public class MainActivity extends Activity implements OnClickListener {
    Button bindService, unbindService;
    Intent intent;

    ServiceConnection conn = new ServiceConnection() 
    {

        @Override
        public void onServiceDisconnected(ComponentName name) // ;
        {
            System.out.println("onServiceDisconnected...");
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) // ;
        {
            MyBinder myBinder = (MyBinder) service;
            myBinder.method();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindService = (Button)findViewById(R.id.bindService);
        unbindService = (Button)findViewById(R.id.unbindService);

        bindService.setOnClickListener(this);
        unbindService.setOnClickListener(this);

        intent = new Intent(this, MyBindService.class);
    }

    @Override
    public void onClick(View v) 
    {
        switch(v.getId())
        {
        case R.id.bindService:
            bindService(intent, conn, BIND_AUTO_CREATE);
            // , 3 0 ,service ,ServiceConnection ;
            break;
        case R.id.unbindService:
            unbindService(conn); // ;
            break;      
        }
    }
}
public class MyBindService extends Service {

    public class MyBinder extends Binder {
        public void method() 
        {
            System.out.println("MyBinder.method()...");
        }
    }

    @Override
    public IBinder onBind(Intent intent) 
    {
        IBinder iBinder = new MyBinder();
        return iBinder;
    }
    @Override
    public void onCreate() 
    {
        super.onCreate();
        System.out.println("service is created...");
    }

    @Override
    public void onDestroy() 
    {
        super.onDestroy();
        System.out.println("service is destoryed...");
    }

}