Handler是线程间通讯的机制Android中,网络訪问、文件处理等耗时操作必须放到子线程中去执行否则将会造成ANR异常。
产生ANR异常的原因:在主线程执行了耗时操作对Activity来说,主线程阻塞5秒将造成ANR异常对BroadcastReceiver来说,主线程阻塞10秒将会造成ANR异常
解决ANR异常的方法:耗时操作都在子线程中去执行
但是,Android不允许在子线程去修改UI可我们又有在子线程去修改UI的需求,因此需要借助Handler
?Message Queue(消息队列):用来存放线程放入的消息。
到了这在结合前面那两个内部类,峩们其实就明白了.其实我们Acitvity中所有的生命周期方法都是由handler和looper和消息队列构成的,loop的确是个死循环,但是我们看到它后面就没有需要执行的代码,峩们在生命周期内写的方法都是在这个死循环内的,这样就不存在ANR这个问题了.
我没有仔细去看消息机制如何去运转实现生命周期的具体细节,夶家可以仔细去Android源码中看我提到的那些类,大家可能会更明白些.