bindService的小结
bindService的小结
passengers 发表于7个月前
bindService的小结
  • 发表于 7个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

摘要: Android

服务

 

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() {

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

 

共有 人打赏支持
粉丝 0
博文 7
码字总数 2822
×
passengers
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: