Java Android:在后台更新表格布局
在Android应用程序上工作,我需要一个TableLayout,以便在不阻塞UI线程的情况下定期更新。以下是表格布局:Java Android:在后台更新表格布局,java,android,Java,Android,在Android应用程序上工作,我需要一个TableLayout,以便在不阻塞UI线程的情况下定期更新。以下是表格布局: <TableLayout android:id="@+id/pidata" android:layout_width="wrap_content" android:layout_height="match_parent"> </TableLayout> 以前的代码 Handler piHandler = new Handler(); Ru
<TableLayout
android:id="@+id/pidata"
android:layout_width="wrap_content"
android:layout_height="match_parent">
</TableLayout>
以前的代码
Handler piHandler = new Handler();
Runnable piRunnable = new Runnable() {
@Override
public void run() {
while (isRunning) {
piHandler.post(new Runnable() {
@Override
public void run() {
//logic to add to TableLayout
}
});
try {
Thread.sleep(3000);
}
catch (InterruptedException ex) {
}
}
}
};
new Thread(piRunnable).start();
您不能在UI线程上调用Thread.sleep,因为它将在方法未完成时阻止屏幕的所有更新,您必须使用以下解决方案之一:
- 使用android.os.Handler和重复消息(handleMessage),这些消息将在UI线程上运行,但将在后台等待新消息到达;(简单的解决方案)
- 自己使用一个线程,并将消息发布到处理程序以返回UI线程;(最佳解决方案)
- 使用倒计时(需要固定的时间来启动并达到0,停止进程)
- 将AsyncTask与while(true)循环一起使用,并从doInBackground使用publishProgress,并在OnProgressUpdate处处理状态更改以接触UI(不推荐,因为AsyncTasks必须具有较短的生命周期)
- 使用服务执行与AsyncTask相同的操作,并向活动发送广播;(复杂解决方案)
Handler piHandler = new Handler();
Runnable piRunnable = new Runnable() {
@Override
public void run() {
while (isRunning) {
piHandler.post(new Runnable() {
@Override
public void run() {
//logic to add to TableLayout
}
});
try {
Thread.sleep(3000);
}
catch (InterruptedException ex) {
}
}
}
};
new Thread(piRunnable).start();