绑定型service

/*
* Google要求从android5.0开始必须使用显示Intent启动service组件;
*
* 启动型与绑定型的区别:
* -启动型:Activity和Service相对独立,Activity销毁,服务不会终止;
* –生命周期:一个服务只会创建一次、销毁一次,但是可以开始多次,
* 即onCreate和onDestroy方法只会被调用一次,而onStart方法会被调用很多次
* -绑定型:Activity和Service绑定,Activity退出,服务也自动销毁;
*
* Service与Avtivity通信
* • Service与Avtivity之间使用ServiceConnection接口进行通信
* ServiceConnection介绍
* – ServiceConnection回调接口用于接收onServiceConnected和onServiceDisconnected事件
* – 由于bindService方法是异步执行的,即bindService方法返回后,并不能立刻获取Service的实例,必须
* 响应onServiceConnected事件,在这个事件中获取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...");
    }

}


你可能感兴趣的:(绑定型service)