for死循环为什么不会anr是死循环

Handler是线程间通讯的机制Android中,网络訪问、文件处理等耗时操作必须放到子线程中去执行否则将会造成ANR异常。

产生ANR异常的原因:在主线程执行了耗时操作对Activity来说,主线程阻塞5秒将造成ANR异常对BroadcastReceiver来说,主线程阻塞10秒将会造成ANR异常

解决ANR异常的方法:耗时操作都在子线程中去执行

但是,Android不允许在子线程去修改UI可我们又有在子线程去修改UI的需求,因此需要借助Handler

?Message Queue(消息队列):用来存放线程放入的消息。

到了这在结合前面那两个内部类,峩们其实就明白了.其实我们Acitvity中所有的生命周期方法都是由handler和looper和消息队列构成的,loop的确是个死循环,但是我们看到它后面就没有需要执行的代码,峩们在生命周期内写的方法都是在这个死循环内的,这样就不存在ANR这个问题了.
我没有仔细去看消息机制如何去运转实现生命周期的具体细节,夶家可以仔细去Android源码中看我提到的那些类,大家可能会更明白些.

我要回帖

更多关于 for死循环为什么不会anr 的文章

 

随机推荐