bindService的小结

服务

 

StartService 和 BindService的区别:

 

StartService是和调用者(Activity)没有联系,即调用者退出,服务依然可以在后台运行。

生命周期:onCreate()-  >onStartCommand()->startService()->onDestroy()

 

BindService是和调用者(Activity)有联系,一旦调用者退出,服务也会被停止。

生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

 

BindService的使用

绑定一个服务:

Intent intent = new Intent(this, BluetoothScanService.class);
bindService(intent,
conn, Context.BIND_AUTO_CREATE);

参数

conn 实现ServiceConnection类

Context.BIND_AUTO_CREATE 是否自动启动服务,默认的是这个

 

private ServiceConnection conn = new ServiceConnection() {
//当调用这个方法时说明服务已经绑定连接了

    @Override

    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {

        BluetoothScanService.BindService bindService = (BluetoothScanService.BindService) iBinder;

        BluetoothScanService service = bindService.getService();
         service.abc();//可以在这里调用服务里的方法了



    }
//当系统与service的连接意外丢失时调用此方法(如service崩溃了或被强杀了)

    @Override

    public void onServiceDisconnected(ComponentName componentName) {



    }

};

 

服务解绑:

unbindService(conn); //虽然说当调用者退出后,服务也会关闭,但我们还需要手动去解绑,否则就会报异常

 

都是需要去实现ServiceConnection类的

 

附,服务类的代码:

public class BluetoothScanService extends Service {



    @Override

    public void onCreate() {

        super.onCreate();

    }



    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

        scan();

        return super.onStartCommand(intent, flags, startId);

    }



    @Override

    public void onDestroy() {

        super.onDestroy();

    }



    @Nullable

    @Override

    public IBinder onBind(Intent intent) {

//        scan();

        return bindService;

    }
 
//创建BindService类,通过BindService类来操作服务里的方法

    private BindService bindService = new BindService();



    public class BindService extends Binder {



        public BluetoothScanService getService() {

            return BluetoothScanService.this;

        }

    }1)
//注:如果使用的是startService,那么就需要在onStartCommand()方法里执行

//如果使用的是bindService,那么就需要在onBind()方法里执行

    private void scan() {

              //在服务里要做的事
    }
}

 

转载于:https://my.oschina.net/u/3589423/blog/1204505

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值