BindService

来源:互联网 发布:广安广电网络 编辑:程序博客网 时间:2024/05/16 01:14

Service是程序后台运行的体现,需要在Androidmanifest文件中注册。示例:后台播放音乐和天气类软件的前台Service。

首先Service和Activity都是运行在主线程里的,另外Service与线程一点关系都没有。

启动方式有startService和bindService两种。以bindService的方式启动Service时可以与Activity进行交互,所以只写这种用法。

//MainActivity.javapublic class MainActivity extends Activity implements OnClickListener{    Button btn1,btn2,btn3,btn4;    Intent intent1;    MyService service;    /*--*/    ServiceConnection conn = new ServiceConnection() {        @Override/*Activity与Service异常解除关联时执行此方法*/        public void onServiceDisconnected(ComponentName arg0) {            // TODO Auto-generated method stub                  }        @Override/*Activity与Service关联时执行此方法*/        public void onServiceConnected(ComponentName arg0, IBinder binder) {            // TODO Auto-generated method stub            /*下面语句的作用就是当Activity与Service关联时获取该Service对象(总不能NEW一个Service对象用吧)*/            service=((MyService.MyBinder)binder).getService();            System.out.println("Conn--->onServiceConnected()");             }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn1=(Button) findViewById(R.id.button1);        btn2=(Button) findViewById(R.id.button2);        btn3=(Button) findViewById(R.id.button3);        btn4=(Button) findViewById(R.id.button4);        btn1.setOnClickListener(this);        btn2.setOnClickListener(this);        btn3.setOnClickListener(this);        btn4.setOnClickListener(this);    }    @Override    public void onClick(View arg0) {        // TODO Auto-generated method stub        switch(arg0.getId())        {        case R.id.button1:        /*用intent关联Activity与Service并通过bindService启动服务*/            intent1 = new Intent(MainActivity.this,MyService.class);            bindService(intent1,conn,Service.BIND_AUTO_CREATE);            break;        case R.id.button2:            service.Paly();            break;        case R.id.button3:            service.Stop();            break;        case R.id.button4:        /*解除绑定*/            unbindService(conn);            break;        }    }}
//MyService.javapublic class MyService extends Service{    /*在MyService中写一个MyBinder内部类我感觉是介于ServiceConnection中方法的参数*/    public class MyBinder extends Binder{        public MyService getService(){            return MyService.this;        }    }    public void Paly(){        System.out.println("Service--->Paly()");    }    public void Stop(){        System.out.println("Service--->Stop()");    }    @Override    public IBinder onBind(Intent arg0) {        // TODO Auto-generated method stub        System.out.println("Service--->onBind()");        return new MyBinder();    }    @Override    public void unbindService(ServiceConnection conn) {        // TODO Auto-generated method stub        System.out.println("Service--->unbindService()");        super.unbindService(conn);    }    @Override    public void onCreate() {        // TODO Auto-generated method stub        super.onCreate();        System.out.println("Service--->onCreate()");    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        // TODO Auto-generated method stub        System.out.println("Service--->onStartCommand()");        return super.onStartCommand(intent, flags, startId);    }    @Override    public void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        System.out.println("Service--->onStartCommand()");    }}
0 0
原创粉丝点击