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 操作,当每个操作完成后,将数据放入队列中以供另一个线程池处理,然后再继续下一个收发操作.这避免了阻塞,如果标签移出范围等,同样快速、更容易处理清理。