Android同步侦听器以获取ONVIF设备的返回值

时间:2019-02-15 22:05:09

标签: java android synchronization onvif

我有几个侦听器正在从ONVIF设备搜索中返回值。

我有找到ONVIF设备(IP地址)的代码,然后为每个设备执行for循环以遍历设备列表。对于每个设备,我都会为该设备创建一个侦听器以检索媒体URL流。 (因此,如果有两个ONVIF摄像机,我需要查看每个摄像机的流URL是什么)

由于多线程,我经常同时从这些侦听器接收返回值(在这种情况下,是媒体URL信息)

我需要能够使用这些值更新单个ArrayList,并知道所有设备何时都从我实例化的侦听器返回了值。

我是否有办法为此使用同步类型?

我查阅了一些有关使侦听器“线程安全”的教程,但找不到任何人可以创建多个相同的侦听器来跟踪结果。

这里是代码。一旦触发了侦听器,就会调用“ appendResultsText”函数。 uri字符串是我需要附加到数组中的值(我这样做但不可靠)

awk '{print $1} ' /var/log/httpd/access_log | sort -u | xargs whois -l |  awk '/country/{print $2}'

https://github.com/RootSoft/ONVIF-Java向RootSoft大喊大叫的真棒ONVIF发现库!

请注意,它作为IntentService运行,因此它位于UI线程之外。

1 个答案:

答案 0 :(得分:0)

  

我需要能够使用这些值更新单个ArrayList

由于突变可能比遍历更多,因此请使用synchronized List<T>

final List<T> list = Collections.synchronizedList(new ArrayList<T>());

或者,如果您的列表无法同步,则​​可能需要使用临时ArrayBlockingQueue<T>来将结果排队,然后在所有设备都返回其值之后drainTo ArrayList<T>