在 Android 中重复执行后台线程的最佳方法?
Best way to perform a background Thread repeatedly in Android?
我需要不断地从 USB 读取数据(至少 50 毫秒间隔)并同时更新多个 View
。
更新 View
可以通过使用 Handler
轻松实现,但由于 USB 读取执行太多工作并且无需触及 UI 线程,它必须在不同的线程上完成。
我已经阅读了一些关于重复执行 AsyncTask
的问题 like this 但如果我错了请纠正我:这似乎不是一个好的方法。
在Android中重复执行后台工作的最佳方法是什么?
如果您需要对经过的时间进行更细粒度的控制,我建议您启动一个带有循环的单独线程,并使用 Thread.sleep 在轮询之前等待。当你有新东西时,用 Handler 将它分派到 UI 线程。
类似这样的东西(粗略的草图,应该给你一个想法):
new Thread() {
private boolean stop = false;
@Override public void run() {
while (!stop) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
// poll the USB and dispatch changes to the views with a Handler
}
}
public void doStop() {
stop = true;
}
};
我需要不断地从 USB 读取数据(至少 50 毫秒间隔)并同时更新多个 View
。
更新 View
可以通过使用 Handler
轻松实现,但由于 USB 读取执行太多工作并且无需触及 UI 线程,它必须在不同的线程上完成。
我已经阅读了一些关于重复执行 AsyncTask
的问题 like this 但如果我错了请纠正我:这似乎不是一个好的方法。
在Android中重复执行后台工作的最佳方法是什么?
如果您需要对经过的时间进行更细粒度的控制,我建议您启动一个带有循环的单独线程,并使用 Thread.sleep 在轮询之前等待。当你有新东西时,用 Handler 将它分派到 UI 线程。
类似这样的东西(粗略的草图,应该给你一个想法):
new Thread() {
private boolean stop = false;
@Override public void run() {
while (!stop) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
// poll the USB and dispatch changes to the views with a Handler
}
}
public void doStop() {
stop = true;
}
};