public class InventoryRFID implements RfidEventsListener { @Override public void eventReadNotify(RfidReadEvents rfidReadEvents) { TagData[] tags = reader.Actions.getReadTags(500); if (tags == null) { return; } for (final TagData tag : tags) { startBeepingTimer(); if (epcList.add(tag.getTagID())) { runOnUiThread(new Runnable() { @Override public void run() { String epc = tag.getTagID(); if (epc.startsWith("40")) { String hexEpc = hexToAscii(epc); Log.e("tag", tag.getTagID()); reader(hexEpc); } } }); } } }怎么使用 Handler 避免并发修改 UI。
时间: 2024-02-20 12:58:03 浏览: 22
可以使用 Handler 来避免并发修改 UI,具体步骤如下:
1. 创建 Handler 对象,并在主线程中进行实例化。
2. 在 runOnUiThread 中,使用 Handler 发送一条消息,让其在主线程中更新 UI。
3. 在 Handler 中处理消息,更新 UI。由于 Handler 在主线程中运行,所以不会出现并发修改 UI 的问题。
修改后的代码如下:
```
public class InventoryRFID implements RfidEventsListener {
private Handler mHandler = new Handler(Looper.getMainLooper());
@Override
public void eventReadNotify(RfidReadEvents rfidReadEvents) {
TagData[] tags = reader.Actions.getReadTags(500);
if (tags == null) {
return;
}
for (final TagData tag : tags) {
startBeepingTimer();
if (epcList.add(tag.getTagID())) {
mHandler.post(new Runnable() {
@Override
public void run() {
String epc = tag.getTagID();
if (epc.startsWith("40")) {
String hexEpc = hexToAscii(epc);
Log.e("tag", tag.getTagID());
reader(hexEpc);
}
}
});
}
}
}
}
```