我们知道,在Android系统中,handler配合Looper,MessageQuene,Message是想主线程与子线程间的通信。主线程无法做耗时操作,需要创建子线程执行耗时操作后,通过handler对象向主线程发送消息通知主线程处理消息,更新ui.在这过程中,handler担任了消息的发送和处理工作,是主线程与子线程之间沟通的桥梁。那么,对于另一种情况:可否在子线程之间通信?当然可以,同样是通过handler。
考虑如果在子线程A中直接new出一个handler,实现handleMessage方法,在子线程B中调用handler.sendMessage方法发送一个消息,程序会报异常如下:
05-08 06:41:59.519 13661-13680/com.example.zhaojungao.demo E/AndroidRuntime: FATAL EXCEPTION: Thread-150
Process: com.example.zhaojungao.demo, PID: 13661
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<i