Android 上的线程 NFC 标签收发调用
Threaded NFC tag transceive calls on Android
在我的应用程序中,我需要使用 NfcA.transceive()
执行多个 NFC-A 标签读取
此外,该应用需要执行与不同读取数据相关的缓慢 API 调用
因此,我 运行 在单独的线程上可调用以处理各种读取->API 任务。
这种方法安全吗?收发器注释字符串表示
This is an I/O operation and will block until complete.
这是否确保我的收发调用(来自不同线程)不会相互干扰?
是的,根据文档,其他线程会等待,但是您应该注意以下几点:
public void close ()
Also causes all blocked I/O operations on other thread to be canceled and return with IOException
因此,如果任何线程调用 close()
,它将导致所有其他等待线程接收 IOException。您如何知道哪个线程是最后一个才能正确调用 close()
?如果标签在所有线程完成之前移出范围会怎样?
我会提出一种替代方法,在单个线程中按顺序执行所有 reading/transceive 操作,当每个操作完成后,将数据放入队列中以供另一个线程池处理,然后再继续下一个收发操作.这避免了阻塞,如果标签移出范围等,同样快速、更容易处理清理。
在我的应用程序中,我需要使用 NfcA.transceive()
执行多个 NFC-A 标签读取此外,该应用需要执行与不同读取数据相关的缓慢 API 调用
因此,我 运行 在单独的线程上可调用以处理各种读取->API 任务。
这种方法安全吗?收发器注释字符串表示
This is an I/O operation and will block until complete.
这是否确保我的收发调用(来自不同线程)不会相互干扰?
是的,根据文档,其他线程会等待,但是您应该注意以下几点:
public void close ()
Also causes all blocked I/O operations on other thread to be canceled and return with IOException
因此,如果任何线程调用 close()
,它将导致所有其他等待线程接收 IOException。您如何知道哪个线程是最后一个才能正确调用 close()
?如果标签在所有线程完成之前移出范围会怎样?
我会提出一种替代方法,在单个线程中按顺序执行所有 reading/transceive 操作,当每个操作完成后,将数据放入队列中以供另一个线程池处理,然后再继续下一个收发操作.这避免了阻塞,如果标签移出范围等,同样快速、更容易处理清理。