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 16:57:43 浏览: 52
在 Android 中,Handler 是一种用于在不同线程之间传递和处理消息的机制,可以用它来避免并发修改 UI。下面是使用 Handler 的示例代码:
1. 在 Activity 中定义一个 Handler 对象:
```
private Handler mHandler = new Handler();
```
2. 在 eventReadNotify() 方法中,将需要更新 UI 的代码放入 Runnable 对象中,通过 mHandler.post() 方法将其发送到 UI 线程:
```
@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);
}
}
});
}
}
}
```
3. 在 runOnUiThread() 方法中的代码可以删除,因为使用了 Handler,所有的 UI 更新代码都已经在 UI 线程中执行了。
阅读全文