面试题:Android中异步任务处理的几种方式,以及它们的优缺点。
第一种:使用handler
缺点明显:
使用handler进行异步处理时,容易产生内存泄漏问题。固然可以通过将handler设置为静态内部类,解决这个问题,但是将handler设置为静态内部类后就无法引用内部成员变量。
内存泄漏原因:
Activity要销毁时,消息队列里消息没处理完,Message Queue默认引用handler,handler默认引用activity。
第二种:使用IntentService(异步任务处理服务)
优点:可以在后台执行,不受Activity生命周期影响。(只能通过startActivity()启动IntentService,可以像普通service一样绑定activity,通过Binder通信)
缺点:如果说消息队列里没消息了,那么service会暂停,内存不够的情况下有可能被系统杀死。
第三种:使用handlerThread(一个继承了Thread的handler处理类)
Thread + 消息机制
优点:使用非常灵活(自己手写的代码一般也是最多的)一般只在Activity里使用,主线程,工作线程均可实现自己的handler机制。
缺点:Activity挂了,也就跟着挂了,需要后台运行那就用IntentService。
第四种:使用AsyncTask
优点:被封装过,需要显示进度条的情况下非常方便,可以串行,也可以并行。
缺点:没那么灵活,只能在主线程里创建。
作者:千夜零一
原文链接:https://www.jianshu.com/p/84c65e3b244e