AsyncTask中各个函数详细的调用过程,初步实现异步任务
生活随笔
收集整理的這篇文章主要介紹了
AsyncTask中各个函数详细的调用过程,初步实现异步任务
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?AsyncTask內(nèi)部類可能會產(chǎn)生內(nèi)存泄露的問題
解決上述內(nèi)部類可能引起的內(nèi)存泄露問題的方法
- 將AsyncTask或者Thread的子類作為單獨的類文件,不持有Activity的強引用
- 將AsyncTask或者Thread的子類使用static修飾,則不會隱式持有Activity的強引用
- 如果是匿名內(nèi)部類,則需要將其對象設(shè)置成成員屬性,使用static修飾就不會隱式持有Activity的強引用。
異步任務(wù)是我們經(jīng)常要使用的東西,android中提供了一套解決方案,從異步任務(wù)的開始到結(jié)束,相當(dāng)完善。本實例沒有任何應(yīng)用價值,只是說明了AsyncTask中各個函數(shù)的調(diào)用順序。
具體的結(jié)果看下面的Log輸出即可:
異步任務(wù)類:
AsyncTaskTest.java
package com.kale.asynctask;import java.net.URL;import android.R.integer; import android.os.AsyncTask;/*** @author:Jack Tony* @tips :* 必須在UI線程中創(chuàng)建AsyncTask實例* 必須在UI線程中執(zhí)行AsyncTask的execute方法* 每個AsyncTask只能執(zhí)行一次,不能多次調(diào)用。要用的話再生成一個對象再執(zhí)行即可* @date :2014-8-1*/ /*** @param * execute傳來的參數(shù)是第三個參數(shù)* 第一個參數(shù)的類型提供給publishProgress做參數(shù)(可變長的數(shù)組)* 第二個參數(shù)定義的是onProgressUpdate的參數(shù)類型(可變長的數(shù)組)* 第三個參數(shù)作為doInBackground返回值的類型,返回給onPostExecute做形參*/ public class AsyncTaskTest extends AsyncTask<URL, Integer, String>{/* (非 Javadoc)* @see android.os.AsyncTask#onPreExecute()* 開始異步任務(wù)前會調(diào)用此方法,這個方法執(zhí)行在UI線程中*/@Overrideprotected void onPreExecute() {System.out.println("onPreExecute 開始執(zhí)行");System.out.println("onPreExecute 執(zhí)行初始化操作,執(zhí)行UI操作");System.out.println("onPreExecute 所在的線程:"+Thread.currentThread().getName());System.out.println("onPreExecute 執(zhí)行完畢,開始執(zhí)行doInBackground");}/* * @see android.os.AsyncTask#doInBackground(Params[]),里面就是個可變長度的數(shù)組* 里面寫后臺線程要完成任務(wù),里面可以調(diào)用publishProgress(values);更新進度* 可以有變長的參數(shù),對個數(shù)無要求*/@Overrideprotected String doInBackground(URL... params) {System.out.println("doInBackground 開始執(zhí)行");System.out.println("doInBackground 執(zhí)行耗時的異步任務(wù)");System.out.println("doInBackground 所在的線程:"+Thread.currentThread().getName());System.out.println("doInBackground 執(zhí)行耗時的異步任務(wù)");System.out.println("doInBackground 中調(diào)用publishProgress更新下視圖");for (int i = 0; i < 3; i++) {publishProgress(i);//這里傳的值是給onProgressUpdate做參數(shù)的,這里傳的也是一個可變長的數(shù)組try {Thread.sleep(100);} catch (InterruptedException e) {// TODO 自動生成的 catch 塊 e.printStackTrace();}}System.out.println("doInBackground 執(zhí)行完畢,準(zhǔn)備執(zhí)行onPostExecute");return "doInBackground執(zhí)行完后的結(jié)果";}/* (非 Javadoc)* @see android.os.AsyncTask#onProgressUpdate(Progress[])* 在doInBackground中調(diào)用publishProgress時會執(zhí)行這個方法,主要用來更新進度* 執(zhí)行在UI線程中*/@Overrideprotected void onProgressUpdate(Integer... values) {System.out.println("onProgressUpdate 開始執(zhí)行,更新UI視圖,一般是進度");System.out.println("onProgressUpdate 執(zhí)行第【"+(values[0].intValue()+1)+"】次更新操作");System.out.println("onProgressUpdate 所在的線程:"+Thread.currentThread().getName());System.out.println("onProgressUpdate 執(zhí)行完畢,更新操作結(jié)束");}/* (非 Javadoc)* @see android.os.AsyncTask#onPostExecute(java.lang.Object)* 在doInBackground執(zhí)行完后,系統(tǒng)將doInBackground方法返回的參數(shù)作為形參傳遞到這個方法中* 它執(zhí)行在UI線程中*/@Overrideprotected void onPostExecute(String result) {System.out.println("onPostExecute 開始執(zhí)行,更新UI視圖");System.out.println("onPostExecute 接收到的處理結(jié)果是:【"+result+"】");System.out.println("onPostExecute 執(zhí)行收尾操作");System.out.println("onPostExecute 所在的線程:"+Thread.currentThread().getName());System.out.println("onPostExecute 執(zhí)行完畢,異步任務(wù)完全結(jié)束");} }?
MainActivity.java
package com.kale.asynctask;import java.net.MalformedURLException; import java.net.URL;import android.app.Activity; import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);AsyncTaskTest async = new AsyncTaskTest();URL url = null;try {url = new URL("http://www.baidu.com");} catch (MalformedURLException e) {e.printStackTrace();}async.execute(url,url);//這里傳進去的數(shù)據(jù)是給doInBackground做參數(shù)用的,可以傳任意個參數(shù) } }?
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的AsyncTask中各个函数详细的调用过程,初步实现异步任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好用的侧边栏菜单/面板jQuery插件
- 下一篇: Curator selector