【Android】线程及异步操作

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执行任务

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。