Android Bound Services 简单使用

Bound Service 跟一般的Service的区别是Bound Service可以提供一些方法给开启它的人(组件),相当于把自己的把柄给Activity,这样Activity就可以控制这个Service,不至于不收控制。

1.首先,我们新建一个类,继承Service,重写onBind方法,这时候这个方法就有用了。而且必须用。别忘了注册Service。

2.我们在类里创建一个内部类,继承Binder

public class LocalBinder extends Binder {
        public void show(){
            Toast.makeText(MyBoundService.this, "测试", Toast.LENGTH_SHORT).show();
        }
    } 

这里的方法就是提供给Activity的。

然后实例化。

private LocalBinder binder = new LocalBinder();

把这个实例通过onBind方法返回。

@Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

全部代码

package com.hyw.test;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;

public class MyBoundService extends Service {

    private LocalBinder binder = new LocalBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    public class LocalBinder extends Binder {
        public void show(){
            Toast.makeText(MyBoundService.this, "测试", Toast.LENGTH_SHORT).show();
        }
    } 

然后在Activity里定义服务绑定时的回调方法

private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //解除绑定时执行
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定服务时执行
        }
    };

绑定服务时调用的那个方法里的那个IBinder service参数就是Service的onBind方法返回的那个Ibinder。在这个方法里我们可以获得Service里定义的那个LocalBinder 的实例,也就是onBinder返回的那个binder。获得之后我们就可以使用LocalBinder 这个内部类里定义的方法了。

private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //解除绑定时执行
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定服务时执行
            LocalBinder binder = (LocalBinder) service;
            binder.show();
        }
    };

为了更方便的控制Service,我们一般会在LocalBinder 定义一个获得Service的方法。

public class LocalBinder extends Binder {
        public void show(){
            Toast.makeText(MyBoundService.this, "测试", Toast.LENGTH_SHORT).show();
        }
        MyBoundService getMyBoundService (){
            return MyBoundService.this;
        }
    } 

然后在activity里通过回调方法获得binder,再通过binder获得Service的实例,使用service的方法就更方便了。

private ServiceConnection connection = new ServiceConnection() {


        @Override
        public void onServiceDisconnected(ComponentName name) {
            //解除绑定时执行
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定服务时执行
            LocalBinder binder = (LocalBinder) service;
            mService = binder.getMyBoundService();
            binder.show();
        }
    };

说了这么多,我们还没绑定呢

Intent intent = new Intent(this,MyBoundService.class);
            bindService(intent, connection, BIND_AUTO_CREATE);

connection就是那个回调。

那么怎么解除绑定呢?

这样就行

unbindService(connection);

注意onServiceDisconnected回调方法只在当与服务的联接发生意外中断时,比如服务崩溃或者被杀死时,Android系统将会调用该方法。客户端解除绑定时,不会调用该方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值