TimerTask 无法更新 UI?

Mar*_* Li 0 java android task handler runnable

 new Timer().schedule(new TimerTask() {

        public void run() {
            KeyBoardUtil.showKeyBoard(et_search);
        }
    }, 300);
Run Code Online (Sandbox Code Playgroud)

我显示键盘使用 TimerTask,它运行良好。怎么解释呢?

Ahm*_*deh 5

您可以使用runOnUiThread

   runOnUiThread(new Runnable(){
        public void run() {
             // Your code
        }
    });
Run Code Online (Sandbox Code Playgroud)

或者

Handler mainHandler = new Handler(context.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {
        // Your code
    }  
};
mainHandler.post(myRunnable);
Run Code Online (Sandbox Code Playgroud)

developer.android.com

在上一课中,您学习了如何在 ThreadPoolExecutor 管理的线程上启动任务。最后一课将向您展示如何将数据从任务发送到在用户界面 (UI) 线程上运行的对象。此功能允许您的任务执行后台工作,然后将结果移动到 UI 元素,例如位图。

每个应用程序都有自己的特殊线程来运行 UI 对象,例如 View 对象;这个线程称为 UI 线程。只有在 UI 线程上运行的对象才能访问该线程上的其他对象。由于您在线程池中的线程上运行的任务并未在您的 UI 线程上运行,因此它们无权访问 UI 对象。要将数据从后台线程移动到 UI 线程,请使用在 UI 线程上运行的处理程序。