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所传的参数
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所传的参数