关于bindService()和unbindService()的使用

start方式的特点:
服务器跟启动源没有任何联系,无法取到服务的对象
Bind方式的特点:
通过Ibinder接口实例返回一个ServicerConnection对象给启动源,
通过ServiceConnection对象的相关方法可以得到Service对象
Bind启动的Service服务器中的方法
public void onCreate(){}
public IBinder onBind(Intent intent){}
public void unbindService(ServiceConnection conn){}
public void onDestroy(){}

public class BindService extends Service {
    public void onCreate(){
        super.onCreate();
        System.out.println("=====onCreate被调用");}
    //新建一个类,返回binder服务器本身
    public class MyBinder extends Binder{
    public BindService getService(){
        return  BindService.this;
    }
    }
    //通过IBinder  new出上面的新建的类
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }


public void unbindService(ServiceConnection connection){
        super.unbindService(connection);
        System.out.println("======unbindService被调用");}
    public void onDestroy(){
        super.onDestroy();
        System.out.println("onDestory被调用");}
    public void play(){
        System.out.println("========paly被调用");
    }
}
public class MainActivity extends AppCompatActivity {
   public  BindService service;
    Intent intent1;
    ServiceConnection connection=new ServiceConnection() {
        @Override
        ////当启动源和Service成功链接的时候启动这个方法
        public void onServiceConnected(ComponentName componentName, IBinder binder) {
            service=((BindService.MyBinder)binder).getService();
        }

        @Override
        //当启动源和Service的链接意外丢失的时候启动这个方法
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1=(Button)findViewById(R.id.button1);
        Button button2=(Button)findViewById(R.id.button2);
        final Intent intent=new Intent(this,FirstServer.class);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startService(intent);
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stopService(intent);
            }
        });
    }
    public void OnClick(View view){
        switch (view.getId()){
            case R.id.bindService:
                   intent1=new Intent(MainActivity.this,BindService.class);
                   //绑定服务器,注意这三个参数
                bindService(intent1,connection, Service.BIND_AUTO_CREATE);
                break;
            case R.id.play:
            //调用服务器的方法
                service.play();

                break;
            case R.id.next:

                break;
            case R.id.stop:
                break;
            case R.id.unBindService:
//解绑服务器
              unbindService(connection);
                break;

        }
    }
}
发布了8 篇原创文章 · 获赞 1 · 访问量 3385
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览