您的位置:首页 > 移动开发 > Android开发

学习Android第8天,Asynctask的使用(异步操作)

2016-04-15 21:25 549 查看
AsyncTask的使用背景

Android的UI操作不是线程安全的:

1、主线程中不能执行耗时操作,否则BANG!ANR

2、Android不允许我们在子线程中操作主线程中的UI控件,否则BANG!崩

3、UI操作只能在UI线程执行,(UI线程就是主线程)

4、耗时操作要放在子线程中去执行,执行完之后将结果返回给主线程去刷新UI控件

任何在其他线程访问主线程:

1、Handler线程通信机制

2、Activity。runOnUiThread(Runnable)

3、View.post(Runnable)或者View.postDelay(Runnable,long)

4、AsyncTask(异步任务)

为什么使用AsyncTask

1、我们不需要自己创建子线程,AsyncTask内部已经封装好了一个线程池去执行耗时操作

2、不需要自己写相应的方法去更新UI界面 例如:根据下载的进度更新UI界面中ProgressBar的进度

3、AsyncTask已经包含了所有子线程和UI线程需要处理的操作

AsyncTask异步任务

1、包含一系列的回调方法来完成在子线程中去完成的耗时操作,并将结果返回给主线程去刷新UI

2、程序员只需要继承AsyncTask,提供三个泛型参数,并实现这几个回调方法

3、调用execute(Params)方法来执行这个异步任务

任何使用AsyncTask

1、创建一个类,继承自AsyncTask

2、指定三个泛型
第一个泛型 String 指定调用execute(String)方法时的入参,
DoInBackground
第二个泛型 Integer
doInBackground方法中提示更新进度是使用的数据类型
第三个泛型 byte[]
doInBanckground的返回类型,onPostExecute 的入参数据类型

3、复写一个或多个AsyncTask的方法
onPreExecute 当AsyncTask.execute()方法时,立即被调用
doInBanckground 在子线程中执行,入参就是AsyncTask.execute(“aaa”)
的参数

onPostExecute(byte[] result) 在主线程中执行,入参是doInBanckground
的返回值

4、publishProgress()入参就是第二个参数
此方法实在doInBanckground方法中调用,每调用一次此方法,
onProgressUpdate就会被调用

5、onProgressUpdate方法的参数就是publishProgress所传的参数 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: