繁体   English   中英

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

[英]Where does main or UI thread in android prepare looper?

似乎在主线程中,我只需要编写一个扩展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);
}

主Looper是在ActivityThread类的main方法中使用以下方法调用准备的:

Looper.prepareMainLooper();

例如见的源代码在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM