android2.3之后 从android4.0正式开始 主线程不能访问网络,子线程不能操作UI控件,引入hander消息发送机制。
我们通过子线程拿到数据,把它放在message中,通过Hander.sendMessage方法,
把消息发送,发送消息之后,hander调用equeueMessage方法(发送方)把消息push到MessageQueue消息队列中(MessageQueue.equeueMessage接收方)一次握手
消息的累加,造成不断的压栈,这时looper提供动力调用loop方法开启无限循环,MessageQueue调用next()方法将货物向前传送 货物自己被传送到我们的主线程中,
货物取出自己身上的标记((msg.getTarget()取出自己身上的标记是Handler )之后执行Handler.dispatchMessage把消息分发给Hander(分发就是接口回调CallBack,
通过handeMessage()方法获得数据)。通过回调接口中的HandleMessage()方法,由此主线程操作UI控件。
由于本地线程ThreadLocal<looper> 保证了looper消息泵、MessageQueue消息队列与主线程的唯一性,
本地线程ThreadLocal<looper> 保证了looper、MessageQueue消息队列与主线程的唯一性,
一个线程有且只有一个looper 本地线程变量ThreadLocal<Looper>保证Looper的唯一性用final修饰 消息泵需要充电加水所以需要前期的准备工作prepare()方法
主线程在创建的是候就自动给我们创建了一个preparedMainLoop()
我们通过子线程拿到数据,把它放在message中,通过Hander.sendMessage方法,
把消息发送,发送消息之后,hander调用equeueMessage方法(发送方)把消息push到MessageQueue消息队列中(MessageQueue.equeueMessage接收方)一次握手
消息的累加,造成不断的压栈,这时looper提供动力调用loop方法开启无限循环,MessageQueue调用next()方法将货物向前传送 货物自己被传送到我们的主线程中,
货物取出自己身上的标记((msg.getTarget()取出自己身上的标记是Handler )之后执行Handler.dispatchMessage把消息分发给Hander(分发就是接口回调CallBack,
通过handeMessage()方法获得数据)。通过回调接口中的HandleMessage()方法,由此主线程操作UI控件。
由于本地线程ThreadLocal<looper> 保证了looper消息泵、MessageQueue消息队列与主线程的唯一性,
本地线程ThreadLocal<looper> 保证了looper、MessageQueue消息队列与主线程的唯一性,
一个线程有且只有一个looper 本地线程变量ThreadLocal<Looper>保证Looper的唯一性用final修饰 消息泵需要充电加水所以需要前期的准备工作prepare()方法
主线程在创建的是候就自动给我们创建了一个preparedMainLoop()