线程与进程——线程
线程的实现
|
1、Thread |
2、Runnable |
3、Handler 涉及到的类信息 1、Handler,消息处理器 ①sendMessage() public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0); } ② 2、Message,消息3、MessageQueue,消息队列,新增加的Message放在消息队列的尾部 在sendMessage时,将Message添加到MessageQueue队列中的最后一个 4、Looper,消息轮转器 里面的loop方法,一个死循环while(true),用来从MessageQueue消息队列中取出最后一个Message, 如果没有取出来Message msg = queue.next();那么会被block阻塞在这里 public static void loop() { final Looper me = myLooper(); if (me == null) { throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread."); } final MessageQueue queue = me.mQueue; ...... } ①msg.target.dispatchMessage(msg); 分发消息 在里面handleMessage(msg)处理消息 ②那么Looper消息轮转器,如何被调用呢,什么时候被调用? 答:HandlerThread HandlerThread extends Thread也就是一个线程,那么找run方法5、HandlerThread ①Looper.prepare(); ②Looper.loop(); 6、Handler时序图: |
4、AsyncTask(异步任务) 和Handler相比,哪个更轻量级? 答:Handler
AsyncTask里面有一个线程池,对于大量的消息处理,一个线程处理不过来,需要一个线程池来维护,而对于限有几个消息的话,用Handler轻量级就可以了 |