Handler

2022-03-28  本文已影响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()

上一篇 下一篇

猜你喜欢

热点阅读