TimerTask 无法更新 UI?
TimerTask can not update UI?
new Timer().schedule(new TimerTask() {
public void run() {
KeyBoardUtil.showKeyBoard(et_search);
}
}, 300);
我显示键盘使用 TimerTask,它运行良好。
怎么解释?
您可以使用 runOnUiThread
:
runOnUiThread(new Runnable(){
public void run() {
// Your code
}
});
或
Handler mainHandler = new Handler(context.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
// Your code
}
};
mainHandler.post(myRunnable);
在上一课中,您学习了如何在 ThreadPoolExecutor 管理的线程上启动任务。最后一课将向您展示如何将数据从任务发送到用户界面 (UI) 线程上的对象 运行ning。此功能允许您的任务执行后台工作,然后将结果移动到 UI 元素,例如位图。
每个应用程序都有自己的特殊线程,运行s UI 对象,例如 View 对象;此线程称为 UI 线程。只有 UI 线程上的对象 运行ning 才能访问该线程上的其他对象。因为您 运行 在线程池中的线程上执行的任务不会 运行 在您的 UI 线程上执行,所以它们无权访问 UI 对象。要将数据从后台线程移动到 UI 线程,请在 UI 线程上使用 运行ning 的处理程序。
new Timer().schedule(new TimerTask() {
public void run() {
KeyBoardUtil.showKeyBoard(et_search);
}
}, 300);
我显示键盘使用 TimerTask,它运行良好。 怎么解释?
您可以使用 runOnUiThread
:
runOnUiThread(new Runnable(){
public void run() {
// Your code
}
});
或
Handler mainHandler = new Handler(context.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
// Your code
}
};
mainHandler.post(myRunnable);
在上一课中,您学习了如何在 ThreadPoolExecutor 管理的线程上启动任务。最后一课将向您展示如何将数据从任务发送到用户界面 (UI) 线程上的对象 运行ning。此功能允许您的任务执行后台工作,然后将结果移动到 UI 元素,例如位图。
每个应用程序都有自己的特殊线程,运行s UI 对象,例如 View 对象;此线程称为 UI 线程。只有 UI 线程上的对象 运行ning 才能访问该线程上的其他对象。因为您 运行 在线程池中的线程上执行的任务不会 运行 在您的 UI 线程上执行,所以它们无权访问 UI 对象。要将数据从后台线程移动到 UI 线程,请在 UI 线程上使用 运行ning 的处理程序。