平常我们在开发设计Android程序流程时碰到较用时每日任务的解决,如I/O浏览的数据库操作、互联网浏览等状况时导致UI诈死等难题,根据 AsyncTask能够非常好的处理这个问题,就今日以在Android中实行Downloader.downloadFile(url),很有可能会阻塞全部 页面。显而易见这会危害客户体验,大家如何解决这个问题呢?
方式 一、
建立一个新的进程实行大家的每日任务,应用Thread类,在 run(){}中载入每日任务编码,例如:
new Thread(new Runnable() {
public void run() {
Downloader.downloadFile(url);
}
}).start();
但应用Thread会造成一些出乎意料的难题,*须程序猿用大量的编码手动式的维护保养它。
方式 二: Android SDK为大家给予了一个后台任务的解决专用工具AsyncTask。AsyncTask便是一个封裝过的后台任务类说白了便是多线程每日任务,便捷大家维 护,Android开发设计网提醒那样的益处能够处理一些线程安全难题,AsyncTask立即承继于Object类,部位为 android.os.AsyncTask。要应用AsyncTask工作中我们要给予三个泛型主要参数,并轻载四个方式 (最少轻载一个)。
三个泛型:
Param ,每日任务电动执行机构*须的基本数据类型
Progress 后台管理测算中应用的进展企业基本数据类型
Result 后台管理测算回到結果的基本数据类型
有一些主要参数是能够设定为不应用的,只需传送为Void型就可以,例如AsyncTask
四个流程:
onPreExecute(),实行预备处理,它运作于UI进程,能够为后台任务做一些准备工作,例如制作一个时间轴控制。
doInBackground(Params...), 后台进程实行的实际测算在这儿完成,doInBackground(Params...)是AsyncTask的重要,此方式 务必轻载。在这个方式 内能够 应用publishProgress(Progress...)更改当今的进展值。
onProgressUpdate(Progress...), 运作于UI进程。假如在doInBackground(Params...)中应用了publishProgress(Progress...),便会触 发这一方式 。在这儿能够对时间轴控制依据进展值作出实际的回应。
onPostExecute(Result),运作于UI进程,能够对后台任务的 結果作出解决,結果便是doInBackground(Params...)的传参。此方式 还要常常轻载,假如Result为null说明后台任务沒有 进行(被撤销或是发现异常)。