用于解决SDK出现闪退和蓝牙扫描失效的方法与流程

文档序号:15202832发布日期:2018-08-19 22:25阅读:1693来源:国知局

本发明涉及蓝牙技术领域,具体为一种用于解决sdk出现闪退和蓝牙扫描失效的方法。



背景技术:

随着手机app、微信使用面越来越广,ibeacon——基于低功耗蓝牙4.0技术(ble)的一种硬件,可以通过特定接口起到沟通桥梁的作用与用户实现包括音、视、图、文等多种媒体的互动功能,比如微信摇一摇、旅游导览中自动触发音视频讲解等等,已经是现代信息社会不可缺少的一个技术热点。市场上也有着专业的蓝牙基站设备,提供一体化的蓝牙连接sdk,也大大的方便了开发者进行二次开发。

但是在开发过程中发现,该专业蓝牙基站提供的sdk在部分手机上被长时间调用时会出现扫描失效以及不稳定导致app闪退的现象。



技术实现要素:

本发明的目的在于提供一种用于解决sdk出现闪退和蓝牙扫描失效的方法,至少可以解决现有技术中的部分缺陷。

为实现上述目的,本发明实施例提供如下技术方案:一种用于解决sdk出现闪退和蓝牙扫描失效的方法,s1,打开终端上的app,获取所述终端周边的所有的蓝牙基站beacon设备;s2,将各所述蓝牙基站beacon设备均放入同一并发队列中;s3,不间断地逐一将所述并发队列中的所述蓝牙基站beacon设备取出;s4,确认所述并发队列中是否已经有任务;是,则判断beaconlist是否为0;否,则返回所述s3步骤中;s5,判断beaconlist是否为0;否,则判断次数是否超过上限;是,则重启扫描服务,然后重新回到所述s3步骤中;s6,判断次数是否超过上限;否,则计数加1;是,则重新返回所述s3步骤中。

进一步,app将每秒扫描到的所有的所述蓝牙基站beacon设备保存起来,并判断当前所述蓝牙基站beacon设备的个数,若在一段连续的时间内,周边扫描到的所述蓝牙基站beacon设备的个数都为0,则判定sdk已经扫描不到周边的蓝牙基站beacon设备的信息。

进一步,将每秒扫描到的周边的所有的所述蓝牙基站beacon设备放入同一并发队列中,该并发队列不做任何另外的逻辑处理和业务操作,而是在另一并发队列中进行逻辑处理和业务操作。

进一步,对取出来的所述蓝牙基站beacon设备进行集合大小判断和计数,若连续8次取出的集合大小都为0,则执行重启蓝牙扫描服务的操作,若取出的集合大小不为0,则计数加1。

进一步,采用文件接口对计数次数进行任意调整和设置。

进一步,采用java语言,构造beaconlist和原子变量;所述beaconlist,用于存放当前扫描到的所述蓝牙基站beacon设备;所述原子变量,用于存储当前beaconlist的大小连续为0的次数。

进一步,采用并发队列concurrentlinkedqueue存储所述beaconlist。

进一步,采用安全循环线程服务taskthread,不间断地从所述并发队列concurrentlinkedqueue中poll出对象,动态分析所述beaconlist的大小及信息内容。

进一步,采用printwriter定制化生成服务日志,便于开发人员维护。

与现有技术相比,本发明的有益效果是:

1、通过将各所述蓝牙基站beacon设备均放入同一并发队列中,将监听器方法和真正的业务流程进行有效分离,从而减小监听器的负荷,保证高并发逻辑操作的线程安全,从而解决闪退等不稳定的问题。

2、通过判断beaconlist是否为0来控制是否重启扫描服务,从而解决蓝牙sdk在部分手机上被长时间调用时会出现扫描失效的问题。

附图说明

图1为本发明实施例提供的一种用于解决sdk出现闪退和蓝牙扫描失效的方法的步骤流程图;

图2为本发明实施例提供的一种用于解决sdk出现闪退和蓝牙扫描失效的方法的流程框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

请参阅图1,本发明实施例提供一种用于解决sdk出现闪退和蓝牙扫描失效的方法,包括如下步骤:s1,打开终端上的app,获取所述终端周边的所有的蓝牙基站beacon设备;s2,将各所述蓝牙基站beacon(毕垦)设备均放入同一并发队列中;s3,不间断地逐一将所述并发队列中的所述蓝牙基站beacon设备取出;s4,确认所述并发队列中是否已经有任务;是,则判断beaconlist(毕垦列表)是否为0;否,则返回所述s3步骤中;s5,判断beaconlist是否为0;否,则判断次数是否超过上限;是,则重启扫描服务,然后重新回到所述s3步骤中;s6,判断次数是否超过上限;否,则计数加1;是,则重新返回所述s3步骤中。本发明在调用第三方ibeacon蓝牙基站的sdk长时间运行的情形下,保持稳定,进行周边蓝牙基站扫描以及逻辑判断找出离手机最近的蓝牙设备,为上层软件提供最近的蓝牙基站信息形成逻辑功能流程闭环。通过将各所述蓝牙基站beacon设备均放入同一并发队列中,将监听器方法和真正的业务流程进行有效分离,从而减小监听器的负荷,保证高并发逻辑操作的线程安全,从而解决闪退等不稳定的问题。且通过判断beaconlist是否为0来控制是否重启扫描服务,从而解决蓝牙sdk(软件开发工具包)在部分手机上被长时间调用时会出现扫描失效的问题。

作为本发明实施例的优化方案,app将每秒扫描到的所有的所述蓝牙基站beacon设备保存起来,并判断当前所述蓝牙基站beacon设备的个数,若在一段连续的时间内,周边扫描到的所述蓝牙基站beacon设备的个数都为0,则判定sdk已经扫描不到周边的蓝牙基站beacon设备的信息。解决如何判断当前扫描不到周边的蓝牙基站信息的问题。

作为本发明实施例的优化方案,将每秒扫描到的周边的所有的所述蓝牙基站beacon设备放入同一并发队列中,该并发队列不做任何另外的逻辑处理和业务操作,而是在另一并发队列中进行逻辑处理和业务操作。解决了蓝牙sdk监听器中线程不安全导致不稳定闪退的问题。

作为本发明实施例的优化方案,对取出来的所述蓝牙基站beacon设备进行集合大小判断和计数,若连续8次取出的集合大小都为0,则执行重启蓝牙扫描服务的操作,若取出的集合大小不为0,则计数加1。解决当发现扫描不到周边蓝牙基站信息时如何进行恢复扫描。

作为本发明实施例的优化方案,采用文件接口能够计数次数进行任意调整和设置,便于根据实际情况选择是否调整计数次数。

作为本发明实施例的优化方案,采用java语言,构造beaconlist和原子变量;所述beaconlist,用于存放当前扫描到的所述蓝牙基站beacon设备;所述原子变量,用于存储当前beaconlist的大小连续为0的次数。beaconlist和原子变量均采用java语言开发,原子变量能够保证并发操作中的唯一性。

作为本发明实施例的优化方案,采用并发队列concurrentlinkedqueue存储所述beaconlist。具体地,在蓝牙基站sdk提供的监听器方法中,仅仅只将存放了扫描到的周边蓝牙基站beacon设备的beaconlist放进这个并发队列中,对每次循环判断的任务进行管理。

作为本发明实施例的优化方案,采用安全循环线程服务taskthread,不间断地从所述并发队列concurrentlinkedqueue中poll(选)出对象,能够动态分析所述beaconlist的大小及信息内容。

作为本发明实施例的优化方案,采用printwriter定制化生成服务日志,便于开发人员维护。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1