Android线程之Looper

  之前已经为大家奉献了关于Handler和Message的使用,本篇我们来了解一下Handler内部的具体使用,本篇主要探讨Looper的在处理Handler的消息机制中起的重要作用,我们知道我们在子线程向主线程发生消息通过sendMessage()方法,Handler处理消息则是通过handMessage()方法,内部的消息传递机制,下面我们一起来探讨一下。

  为了方便大家的理解,这里我以一个日常生活中的例子来为大家介绍一下Handler、Looper的处理细节:例子讲述的是我们开会时,要去上厕所。

  技术分享

  看到上面的例子,我想大家对于Looper一定有了一个很好的认识。

  自建Thread类中实现Handler对象:

public class MainActivity extends Activity {
    
    private Handler firstHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            System.out.println("UI------->:"+Thread.currentThread());
        };
    };
    
    class Mythread extends Thread{
        private Handler handler;
        @Override
        public void run() {

            Looper.prepare();//创建一个Looper对象
            handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    System.out.println("子线程:"+Thread.currentThread());
                }
            };
            Looper.loop();//通过这个方法循环处理方法
            
        }
    };

    private Mythread thread;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        thread = new Mythread();
        thread.start();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        thread.handler.sendEmptyMessage(1);//在子线程中处理
        firstHandler.sendEmptyMessage(1);//在主线程中处理
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

  LogCat信息:

  技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。