Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数百次成功尝试后,usbManager openDevice调用失败_Usb_Hid - Fatal编程技术网

在数百次成功尝试后,usbManager openDevice调用失败

在数百次成功尝试后,usbManager openDevice调用失败,usb,hid,Usb,Hid,我正在使用usbmanager类管理android 4.1.1机器上的USB主机。 在打开设备失败之前(大约900个事务之后),所有这些似乎都能很好地处理数百个事务,并毫无例外地返回null。 使用探查器,似乎不存在内存泄漏问题 这就是我如何从我的主要活动中初始化通信(执行一次): 这是我测试的代码: ArrayList<DeviceInterface> devList = m_factory.getDevicesList(); if ( devList.size() > 0)

我正在使用usbmanager类管理android 4.1.1机器上的USB主机。 在打开设备失败之前(大约900个事务之后),所有这些似乎都能很好地处理数百个事务,并毫无例外地返回null。 使用探查器,似乎不存在内存泄漏问题

这就是我如何从我的主要活动中初始化通信(执行一次):

这是我测试的代码:

ArrayList<DeviceInterface> devList = m_factory.getDevicesList();
if ( devList.size() > 0){
      DeviceInterface devIf = devList.get(0);
      UsbDeviceConnection connection; 
          try 
    {
        connection = m_manager.openDevice(m_device);
    }
    catch (Exception e)
    {
        return null;
    } 

您可能只是用完了文件句柄,典型的限制是每个进程打开1024个文件。 尝试在
UsbDeviceConnection
上调用
close()


UsbDeviceConnection
对象已分配系统资源(例如文件描述符),该资源将仅在代码中的垃圾回收时释放。但在这种情况下,您在内存不足之前就用完了资源,这意味着还没有调用垃圾收集器。

我在android 4.0上重复运行opendevice时失败,尽管我在代码中只打开了一次。我有一些没有关闭资源的退出路径,我假设操作系统会在进程终止时释放它

然而,在流程终止时释放资源似乎存在一些问题-即使在我终止并启动新流程时,我也会遇到问题。

我最终确保在退出时释放资源,并解决了问题。

谢谢TurboJ,您的答案是正确的。我关闭并确保释放usb端点。问题解决了。我理解你的意思了吗?每个进程1024个文件?这是否意味着,若我不关闭任何连接,重新打开连接和释放设备的次数无关紧要?
ArrayList<DeviceInterface> devList = m_factory.getDevicesList();
if ( devList.size() > 0){
      DeviceInterface devIf = devList.get(0);
      UsbDeviceConnection connection; 
          try 
    {
        connection = m_manager.openDevice(m_device);
    }
    catch (Exception e)
    {
        return null;
    } 
UsbDeviceConnection connection; 
try 
{
  connection = m_manager.openDevice(m_device);
}