蓝牙分包发生消息

蓝牙分包发送消息

有问题可以加QQ讨论:1070800492

  • 1.新建一个消息队列:
private ArrayBlockingQueue<String> msgSendQueue;//发消息的消息对列
private ArrayBlockingQueue<String> msgRecvQueue;//接收消息的队列
  • 2.进行初始化:
        //!< 初始化接收和发送消息队列
        msgSendQueue = new ArrayBlockingQueue<String>(50);
        msgRecvQueue = new ArrayBlockingQueue<String>(100);
  • 3.接收需要发送消息并存入消息队列中
msgSendQueue.offer(action);//action为需要发送消息
  • 4.通过线程发送消息
private class SendThread implements Runnable {
        @Override
        public void run() {
            while(isStartDemonService) {
                String msgString = null;
                try {
                    msgString = msgSendQueue.take();//获取消息队列的消息
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                 //发送消息的方法:大家可以不要在意,注重怎么拿到消息队列的消息就行
                  sendMsg();
            }
        }
    }
  • 5.结束其他线程传来的消息:
    • 只需要把消息放入消息队列就行。
       msgRecvQueue.offer(msg);//msg是存放消息
  • 6.用线程解析消息
private class DataParseThread implements  Runnable {
        @Override
        public void run() {
            while(true) {
                try {
                    String msg=msgRecvQueue.take(); //取消息
                  }
                }
    }
  • 7.因为我们接收消息和发送消息都用到了线程。大家注意观察:我是用的implements Runnable而不是extends Thread;因为消息需要完成行。所以大家也知道为什么要用实现Runable接口的方式了吧。
  • 8.当然还有注意的是:我们并不知道什么时候开始接收消息,也不知道什么时候消息队列有消息需要发送。所有用来while(true)的方式监听我们的消息队列。
  • 9.综上所诉。所以我们的线程在一开始的就开始调用了:在初始化消息队列的时候就开启线程了
 //!< 初始化接收和发送消息队列
        msgSendQueue = new ArrayBlockingQueue<String>(50);
        msgRecvQueue = new ArrayBlockingQueue<String>(100);

        //!< 建立接收数据解析线程
        new Thread(new DataParseThread()).start();
        new Thread(new SendThread()).start();
  • 10.当然我们的线程不肯能一直开启。当我们退出程序的时候。或者我们不需要消息队列的时候是不是就应该关闭线程呢?
  isStartDemonService = false;//boolean的值,在while(isStartDemonService)使用。
  //这里是不是线程就关闭了呢?




当然我们消息肯定是整个消息的接收和发送:所有我们就需要用到了同步:
  public synchronized  boolean setMessage() {
        boolean retStatus=true;
        this.msgSendQueue.offer(action);
        return retStatus;
    }
所有这个synchronized很关键

题外话:谢谢大家观看,有不足之处欢迎大家一起讨论;码字不易,大家喜欢,麻烦点赞哦。


灵魂三问:

  • 有没有觉得技术得不到系统的提升,技术成长慢?
  • 有没面试懵逼,升职加薪难?
  • 有没有想过去大一点的世界看看?

有期望JAVA技术巩固的、Android知识进阶的、期望升职加薪的、Android面试技巧的大厂面试真题的;大家可以加我QQ哦:1070800492。我们一起学习,一起进步!

重要的事情说三遍:

  • 学习、挣钱、自由
  • 学习、挣钱、自由
  • 学习、挣钱、自由

疫情当下,唯有自强

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值