Android sdk 提供将某些操作从主UI线程分离开来的途径:
- AsyncTask类,可完成异步操作并保持与主UI线程的通信
- 标准Thread类完成异步操作
- 在Activity或者Fragment中使用Loader完成数据载入,以保证运行速度
阻塞线程的操作将会产生ANR现象(application not responding)
常见阻塞线程的操作包括:
- 所有过长或负责的计算或操作
- 请求获取长度不定的数据集
- 解析数据集
- 处理多媒体文件,例如图像、视频或音频
- 对长度不定的数据结构进行迭代
- 获取网络资源
- 获取地理位置服务
- 获取内容提供器接口
- 接入本地数据库
- 接入本地文件
- 接入任务包含以上内容的服务
AsyncTask回调方法:
onPreExecute()在后台操作完成前运行在UI线程上;
doInBackground()运行在后台并处理后台操作;
从doInBackground()中调用publishProcess()方法周期性地通知UI线程有关后台操作的进度。该方法向UI操作发送消息,并借此机会更新用户可见的进度条。onProcessUpdate()在UI线程中运行;
后台操作完毕,onPostExecute()在UI线程运行;
运行execute(),AsyncTask以后台方式处理操作,不会影响UI线程;
AsyncTask任务启动方法:
- execute()方法,每个任务实例都被执行一次,像是使用线程池;
- executeOnExector(AsyncTask.THREAD_POOL_EXECUTOR,ID);按照ID执行任务
时间: 2024-11-07 21:52:21