昨天面试被提问android的异步处理机制有哪些,他说处理new thread还有哪种方式,我说implement runnable,他说不是,比如intentservice。
我说那还有asyncTask,loader,然后又问,为什么使用asyncTask,我说因为他有doInbackground方法啊,他问你是因为他有现成的方法可用才用的吗。我说当然了,这没毛病啊。
后来想想他可能是想让我说明白不同的异步处理机制有什么优缺点,平时没总结过,今天总结下。
平时用的异步处理有handler、handlerThread、intentservice、asyncTask、loader等。
handler主要用来在子线程中发消息通知UI线程来更新ui
handlerThread的好处就是自带looper和MessageQueue,不需要自己去创建和维护looper
intentservice继承自service,但是处理任务是在子线程,因为是service所以有不会被轻易杀死的特权,而且任务处理完以后会自动退出service,所以使用起来干净又简洁
asyncTask内部对Executor进行了封装,缺点是各版本的特性不一致,api13后稳定,默认使用串行执行,但可以用executeOnExcutor方法实现并行操作。
loader是android3.0的时候引入的一个异步数据加载框架,可以方便的在activity和fragment中异步加载数据,数据源发生变化时还能够及时发出通知。
图呢,从网上找一个
额,asyncQueryHandler是什么?貌似还没用到过,查一下
官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver
queries easier.) 。这个类的主要作用就是异步对DB数据库进行操作,(这个非常重要,特别是大容量的数据处理时,例如几千联系人的数据读取,按正常的处理速度会非常的慢)。
https://www.cnblogs.com/lbangel/p/4335859.html
搜噶,基本这些吧