【问题标题】:TimerTask can not update UI?TimerTask 不能更新 UI?
【发布时间】:2016-08-30 03:22:28
【问题描述】:
 new Timer().schedule(new TimerTask() {

        public void run() {
            KeyBoardUtil.showKeyBoard(et_search);
        }
    }, 300);

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

【问题讨论】:

    标签: java android task handler runnable


    【解决方案1】:

    你可以使用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);
    

    developer.android.com

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

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

    【讨论】:

    • 我只是想知道为什么在 TimerTask 中打开键盘时应用程序没有崩溃
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 2015-02-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多