android 的多线程实际上就是java的多线程。android的UI线程又称为主线程。
首先是Thread 和 Runnable:
Thread才是一个线程,而Runnable可以理解为一个任务。这个任务只是一个接口。具体的任务执行是在 run()方法执行。
Thread thread = new Thread(Runnable);
那么就是把一个Runnable任务放到线程里面。当调用thread.start() 的时候,系统新开一个线程去执行,这个runnable任务是在多线程执行的。是在新开的线程执行的。
但是thread.run() ,这样子实际上只是在UI线程执行了Runnable 并没有实现多线程。系统也没有新开一个线程。
如果直接 new Runnable().run();那么实际上是直接在UI线程执行了这个任务没有进行一个多线程的操作。
总结:runnable()只是一个任务的抽象,并不是多线程。Thread.start()。才是新开一个多线程。并且在新开的线程执行Thread你们的run()方法。
来看看android 的多线程通信机制的产物 Handler。
下面这3个方法的hanlder实际上是不涉及多线程的。
post(Runnable)让当前线程执行Runnable任务。如果是在主线程调用,那么就是在UI线程执行Runnable。实际上没有多线程执行runnable。
postAtTime(Runnable,long)也是让当前线程在 时间点long 执行Runnble
postDelayed(Runnable long) 让当前线程延时 long 后执行Runnable。
这3个方法实际上可以把handler看着是一个任务调度器,而不是一个多线程相关的。
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long) 发出消息的方法
handleMessage(Message
msg)处理消息 这才是android 的hanlder的多线程通信用到的,看下图
可以看到3个线程共用一个消息队列Message Queue,一个消息循环器LoZ