java - android中的main或UI线程在哪里准备弯针?

标签 java android multithreading handler

似乎在主线程中,我只需要编写一个扩展Handler并覆盖其handleMessage方法的类。然后,我可以创建Handler对象,而无需准备循环程序。

class myHandler extends Handler{

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        String s=(String)msg.obj;
        textView.setText(s);
    }
}

在主线程中,以下代码有效:
handler=new myHandler();

但是在工作线程中,您确实需要先准备循环程序,然后才能创建Handler对象,否则threadLocal.get()无法为当前工作线程获取循环程序。我的问题是必须在某个地方为主线程准备循环程序,但我只是找不到它。我不知道threadLocal如何为主线程找到该循环程序。
class WorkerThread extends Thread{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        Looper.prepare();
        handler=new Handler(){

            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                super.handleMessage(msg);
                System.out.println(msg.obj.toString());
                System.out.println(Thread.currentThread().getName());
            }

        };

        Looper.loop();
    }

}

最佳答案

您将必须在主线程中定义Looper。

handler = new Handler(Looper.getMainLooper());

您可以从主线程或其他工作线程中调用此方法。
void timerMethod(){
    handler.postDelayed(new Runnable() {
        public void run() {
            setTime();
        }
    }, timeDelay);
}

关于java - android中的main或UI线程在哪里准备弯针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796028/

相关文章:

java - fragment 不显示在框架布局中

java - 为什么java中的即时日期显示时间4 :56:02Z for a given date which is before 1884

java - 以编程方式使用现有相机应用程序拍照,而不是使用预览捕获按钮

android - 将焦点从一个编辑文本框移到另一个

java - Android 在主线程上做了太多事情 : Tried separate threads

C 套接字 : using shutdown() to stop server running in background

java - 替代 String.join 来连接

java - 如何将对 new 的调用重构为带参数的方法调用?

java - 简单日期格式解析日期时出错

c# - 如果 socket.connect() 函数卡住了,如何停止它?