Handler

作者: 极客天空 | 来源:发表于2022-03-28 10:48 被阅读0次

    一、Handler简单使用

    public class MainActivity extends AppCompatActivity {
        TextView mTxtShowTest;
        Button mBtn1, mBtn2, mBtn3;
        //1、在主线程中通过匿名内部类创建Handler类对象
        private Handler mhandler2 =  new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                //执行的UI操作
                mTxtShowTest.setText("匿名内部类方法");
            }
        };
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            mTxtShowTest = (TextView) findViewById(R.id.mTxtShowTest); 
            mBtn2 = (Button) findViewById(R.id.mBtn2);  
     
            mBtn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                         // 2、创建所需消息对象
                            Message msg = Message.obtain();
                            msg.what = 1;
     
                            //3、发送消息
                            mhandler2.sendMessage(msg);
                        }
                    //4、开启线程
                    }).start();
                }
            }); 
        } 
    }
    

    二、源码中的执行过程

    handler执行流程.png

    Handler的主要函数


    Handler的主要函数.png

    MessageQueue的执行过程
    enqueueMessage方法


    消息队列.png

    这个就是消息队列 取数据,执行这个动作的对象是Looper
    loop()


    Looper.png
    Message 通过 traget,执行dispatchMessage 传递消息
    而Message 通过 traget就是与之对应的Handler
    Message构造函数.png

    于是整个调用流程就是:
    handler->sendMessage -> messasgeQueue.enqueueMessage
    looper.loop()-> messasgeQueue.next()->handler.dispatchMessage()->handler.handleMessage()

    相关文章

      网友评论

          本文标题:Handler

          本文链接:https://www.haomeiwen.com/subject/wmxpjrtx.html