Android Looper中的MessageQueue消息处理机制

一个线程中只有一个Looper,一个MessageQueue。handler可以有多个,然后handler postDelayed(),或者sendMessageDelayed()的时候,那消息队列根据队列的先进先出原则,那其他的Message会不会因此而延迟呢?所以就有了下面的测试:

public class LooperMessageQueueActivity extends AppCompatActivity {

    private TextView txt;
    private Handler h1;
    private Handler h2;
    private Handler h3;
    private Handler h4;
    private Handler h5;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_looper_message_queue);

        init();
    }

    private void init() {
        txt = (TextView) findViewById(R.id.text);
        h1 = new Handler();
        h2 = new Handler();
        h3 = new Handler();
        h4 = new Handler();
        h5 = new Handler();
    }

    public void OnClicked(View view) {
        int i = 1;
        buildThread(h1, i++);
        buildThread(h2, i++);
        buildThread(h3, i++);
        buildThread(h4, i++);
        buildThread(h5, i++);
    }


    private void buildThread(final Handler h, final int i) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.d("Edgar", "t" + i);
                h.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        txt.setText(txt.getText() + "t" + i + "回来啦!\n");
                        Log.d("Edgar", "t" + i + "回来啦!\n");
                    }
                }, 5000 * (5 - i));
            }
        }).start();
    }
}

然后出来的结果是:
这里写图片描述
可以看到log出来的时间,是先把后面的显示出来,这与队列的”先进先出”相悖。从结果上看是并发显示出来的。
为什么会出现这个现象呢?这个需要深挖.
由于看不到MessageQueue.enqueueMessage(msg, uptimeMillis) 里面的源码,所以这个日后再分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值