Android Framework

Android Handler消息机制

2019-10-24  本文已影响0人  xiabodan

创建Handler时有3种方式

消息分发的优先级:

Message的回调方法:message.callback.run(),优先级最高;
Handler的回调方法:Handler.mCallback.handleMessage(msg),优先级仅次于1;
Handler的默认方法:Handler.handleMessage(msg),优先级最低。

1、Handler的post方法

通过Handler的post(Runnable r)的,本质是拿message时传入了Runnable,执行的是message.callback.run()

public class TestRunnable implements Runnable {
    public boolean wasRun = false;

    @Override public void run() {
        wasRun = true;
    }
}
TestRunnable scratchRunnable = new TestRunnable();
@Test
public void testPost() throws Exception {
    new Handler().post(scratchRunnable);
}

2、传入Callback

执行的是Handler的回调方法Handler.mCallback.handleMessage(msg)

    private Handler.Callback callback = new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            hasHandlerCallbackHandledMessage = true;
            return false;
        }
    };
        
    @Test
    public void shouldCallProvidedHandlerCallback() {
        Handler handler = new Handler(callback);
        handler.sendMessage(new Message());
        assertTrue(hasHandlerCallbackHandledMessage);
    }

3、直接new Handler

执行的是Handler的回调方法Handler.handleMessage(msg)

    @Test
    public void removeMessages_removesFromLooperQueueAsWell() {
        final boolean[] wasRun = new boolean[1];
        Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                wasRun[0] = true;
            }
        };
        handler.sendEmptyMessageDelayed(123, 500);
    }

Handler消息分发机制

messageQueue是在Looper.java中创建的

上一篇 下一篇

猜你喜欢

热点阅读