Android 进阶技术汇总三: 异步任务:AsyncTask+HandlerThread+IntentService+AsyncQueryHandler
前言:Android 异步任务&多线程 技术点概述:
ANR与异步任务:ANR为Android特有耗时报错机制,因为ANR&性能考虑,需要处理掌握 异步任务与多线程。
Thread+Runnable+主Looper handler:Thread处理异步耗时,并将结果通过消息发送给主线程Looper轮询
Thread+Runnable+结合View.post|Activity.runOnUIThread:Handler.sendMessage改用View.post|Activity.runOnUIThread
AsyncTask:基于Executor框架进行的封装,嵌入了线程池,实现异步任务和 子线程&主线程之间的通信apis
HandlerThread:集成了Looper+MessageQueue的Thread子类,处理异步轮询消息队列
IntentService:嵌入了HandlerThread的service子类,用于异步后台任务的service场景
AsyncQueryHandler:用于执行ContentProvider异步CRUD操作
TaskExecutor:自定义线程池异步任务,参照:https://github.com/caobaokang419/WeatherApp
6.1 ANR与异步任务
ANR是Android系统对程序无响应的异常响应,从Android系统的角度来看,发生ANR的原因主要有三个方面:
1. Activity/Fragment在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸);
2. BroadcastReceiver在10秒内没有执行完毕;
3. Service的生命周期方法中有20s以上耗时。
从开发编码的角度来看,主要可能发生的场景包括:
l 耗时的网络访
更多相关文章
- Android中线程同步之Mutex与Condtion的用法
- android 计时器线程
- Android SQLite是线程安全的吗?
- Android 进程和线程
- Android 子线程中更新UI
- Android 线程同步 ConditionVariable的用法
- FFmpeg In Android - tutorial-4-Spawning Threads创建线程
- Android学习笔记(6)————Android的线程与进程
- android jni 多线程编程 join thread