一般说线程间通信主要是指主线程(也叫UI线程)和子线程之间的通信,主要有以下两种方式:
1.AsyncTask机制
AsyncTask,异步任务,也就是说在UI线程运行的时候,可以在后台的执行一些异步的操作;
AsyncTask可以很容易且正确地使用UI线程,AsyncTask允许进行后台操作,
并在不显示使用工作线程或Handler机制的情况下,将结果反馈给UI线程。
但是AsyncTask只能用于短时间的操作(最多几秒就应该结束的操作),
如果需要长时间运行在后台,就不适合使用AsyncTask了,只能去使用Java提供的其他API来实现。
2.Handler机制
Handler,继承自Object类,用来发送和处理Message对象或Runnable对象;
Handler在创建时会与当前所在的线程的Looper对象相关联
(如果当前线程的Looper为空或不存在,则会抛出异常,
此时需要在线程中主动调用Looper.prepare()来创建一个Looper对象)。
使用Handler的主要作用就是在后面的过程中发送和处理Message对象和让其他的线程完成某一个动作
(如在工作线程中通过Handler对象发送一个Message对象,让UI线程进行UI的更新,
然后UI线程就会在MessageQueue中得到这个Message对象
(取出Message对象是由其相关联的Looper对象完成的),并作出相应的响应)。
网友评论