安卓在数据回调时出现的掉包情况,(registerDataCallback被调用的次数和预期的不符)
private void registerDataCallback(UsbDevice usbDevice){ try { WCHUARTManager.getInstance().registerDataCallback(usbDevice, new IDataCallback() { @Override public void onData(int serialNumber, byte[] buffer, int length) { LogUtil.d(String.format(Locale.getDefault(),"serial %d receive data %d:%s", serialNumber,length, FormatUtil.bytesToHexString(buffer, length))); //1.注意回调的执行线程与调用回调方法的线程属于同一线程 //2.此处所在的线程将是线程池中多个端点的读取线程,可打印线程id查看 //3.buffer是底层数组,如果此处将其传给其他线程使用,例如通过runOnUiThread显示数据在界面上, //涉及到线程切换需要一定时间,buffer可能被读到的新数据覆盖,可以新建一个临时数组保存数据 byte[] data=new byte[length]; System.arraycopy(buffer,0,data,0,data.length); if(FILE_TEST){ updateReadDataToFile(usbDevice,serialNumber,data,length); }else { updateReadData(usbDevice,serialNumber,data,length); } } }); } catch (Exception e) { LogUtil.d(e.getMessage()); } }
请问这个是什么原因
热门产品 :
CH592: RISC-V内核BLE5.4无线MCU