BindService

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

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

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

//MainActivity.java
public 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.java
public 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值