Android AsyncTask用法介绍
生活随笔
收集整理的這篇文章主要介紹了
Android AsyncTask用法介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1>界面設計
1.1>效果
1.2>布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.demo.asynctastdemo.MainActivity" ><Button android:id="@+id/start_bt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/start_bt_txt"/><TextViewandroid:id="@+id/progress_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/progess_tv_txt" /><TextView android:id="@+id/result_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/result_tv_txt"/></LinearLayout>
其中strings.xml文件內容為:
<?xml version="1.0" encoding="utf-8"?> <resources><string name="app_name">AsyncTastDemo</string><string name="action_settings">Settings</string><string name="progess_tv_txt">Progess Text</string><string name="result_tv_txt">Result Text</string><string name="start_bt_txt">Start</string></resources>
2>AsyncTask代碼如下:
package com.cxc.asynctaskdemo2;import android.R.string; import android.os.AsyncTask; import android.util.Log; import android.widget.TextView;public class MyAsyncTask extends AsyncTask<String, Integer, String> {private static final String TAG="MyAsyncTask";//聲明控件private TextView progess_tv;private TextView result_tv;public MyAsyncTask(TextView progess_tv, TextView result_tv) {super();this.progess_tv = progess_tv;this.result_tv = result_tv;}/** * 生成該類的對象,并調用execute方法之后 * 首先執行的是onProExecute方法 * 其次執行doInBackgroup方法 */ @Overrideprotected String doInBackground(String... params) {// 此方法將會在后臺線程中執行// TODO Auto-generated method stubLog.d(TAG,"----doInBackground()---thread id:"+Thread.currentThread().getId());String resultString = "";int myProgress = 0;int inputLength = params[0].length();for (int i = 0; i < inputLength; i++) {myProgress = i;resultString += params[0].charAt(i);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}Log.d(TAG,"Thread :"+Thread.currentThread().getId()+"----send:"+myProgress);publishProgress(myProgress);}return resultString;// 返回一個值,它將傳遞給onPostExecute()}/** * 這里的String參數對應AsyncTask中的第三個參數(也就是接收doInBackground的返回值) * 在doInBackground方法執行結束之后在運行,并且運行在UI線程當中 可以對UI控件進行操作 */ @Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);Log.d(TAG,"----onPostExecute()---thread id:"+Thread.currentThread().getId()+"---reciver:"+result);// 和UI線程同步this.result_tv.setText(result);}/** * 這里的Integer參數對應AsyncTask中的第二個參數 * 在doInBackground方法當中,,每次調用publishProgress方法都會觸發onProgressUpdate執行 * onProgressUpdate是在UI線程中執行,所有可以對UI空間進行操作 */ @Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);Log.d(TAG,"----onProgressUpdate()---thread id:"+Thread.currentThread().getId());Log.d(TAG,"Thread :"+Thread.currentThread().getId()+"----reciver:"+values[0]);// 和UI線程同步this.progess_tv.setText(values[0].toString());}}運行后效果如下:
3>運行的Log日志如下:
06-02 09:44:34.690: D/MyAsyncTask(29285): ----main thread --id:1 06-02 09:44:49.160: D/MyAsyncTask(29285): ----doInBackground()---thread id:5293 06-02 09:44:50.165: D/MyAsyncTask(29285): Thread :5293----send:0 06-02 09:44:50.165: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:50.165: D/MyAsyncTask(29285): Thread :1----reciver:0 06-02 09:44:51.165: D/MyAsyncTask(29285): Thread :5293----send:1 06-02 09:44:51.165: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:51.165: D/MyAsyncTask(29285): Thread :1----reciver:1 06-02 09:44:52.165: D/MyAsyncTask(29285): Thread :5293----send:2 06-02 09:44:52.165: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:52.165: D/MyAsyncTask(29285): Thread :1----reciver:2 06-02 09:44:53.170: D/MyAsyncTask(29285): Thread :5293----send:3 06-02 09:44:53.170: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:53.170: D/MyAsyncTask(29285): Thread :1----reciver:3 06-02 09:44:54.165: D/MyAsyncTask(29285): Thread :5293----send:4 06-02 09:44:54.170: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:54.170: D/MyAsyncTask(29285): Thread :1----reciver:4 06-02 09:44:55.170: D/MyAsyncTask(29285): Thread :5293----send:5 06-02 09:44:55.170: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:55.170: D/MyAsyncTask(29285): Thread :1----reciver:5 06-02 09:44:56.175: D/MyAsyncTask(29285): Thread :5293----send:6 06-02 09:44:56.175: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:56.175: D/MyAsyncTask(29285): Thread :1----reciver:6 06-02 09:44:57.175: D/MyAsyncTask(29285): Thread :5293----send:7 06-02 09:44:57.175: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:57.175: D/MyAsyncTask(29285): Thread :1----reciver:7 06-02 09:44:58.175: D/MyAsyncTask(29285): Thread :5293----send:8 06-02 09:44:58.175: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:58.175: D/MyAsyncTask(29285): Thread :1----reciver:8 06-02 09:44:59.175: D/MyAsyncTask(29285): Thread :5293----send:9 06-02 09:44:59.180: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:44:59.180: D/MyAsyncTask(29285): Thread :1----reciver:9 06-02 09:45:00.185: D/MyAsyncTask(29285): Thread :5293----send:10 06-02 09:45:00.185: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:00.185: D/MyAsyncTask(29285): Thread :1----reciver:10 06-02 09:45:01.185: D/MyAsyncTask(29285): Thread :5293----send:11 06-02 09:45:01.185: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:01.185: D/MyAsyncTask(29285): Thread :1----reciver:11 06-02 09:45:02.190: D/MyAsyncTask(29285): Thread :5293----send:12 06-02 09:45:02.190: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:02.190: D/MyAsyncTask(29285): Thread :1----reciver:12 06-02 09:45:03.190: D/MyAsyncTask(29285): Thread :5293----send:13 06-02 09:45:03.190: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:03.190: D/MyAsyncTask(29285): Thread :1----reciver:13 06-02 09:45:04.190: D/MyAsyncTask(29285): Thread :5293----send:14 06-02 09:45:04.195: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:04.195: D/MyAsyncTask(29285): Thread :1----reciver:14 06-02 09:45:05.200: D/MyAsyncTask(29285): Thread :5293----send:15 06-02 09:45:05.200: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:05.200: D/MyAsyncTask(29285): Thread :1----reciver:15 06-02 09:45:06.200: D/MyAsyncTask(29285): Thread :5293----send:16 06-02 09:45:06.200: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:06.200: D/MyAsyncTask(29285): Thread :1----reciver:16 06-02 09:45:07.205: D/MyAsyncTask(29285): Thread :5293----send:17 06-02 09:45:07.205: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:07.205: D/MyAsyncTask(29285): Thread :1----reciver:17 06-02 09:45:08.200: D/MyAsyncTask(29285): Thread :5293----send:18 06-02 09:45:08.200: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:08.205: D/MyAsyncTask(29285): Thread :1----reciver:18 06-02 09:45:09.205: D/MyAsyncTask(29285): Thread :5293----send:19 06-02 09:45:09.205: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:09.205: D/MyAsyncTask(29285): Thread :1----reciver:19 06-02 09:45:10.215: D/MyAsyncTask(29285): Thread :5293----send:20 06-02 09:45:10.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:10.215: D/MyAsyncTask(29285): Thread :1----reciver:20 06-02 09:45:11.210: D/MyAsyncTask(29285): Thread :5293----send:21 06-02 09:45:11.210: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:11.210: D/MyAsyncTask(29285): Thread :1----reciver:21 06-02 09:45:12.215: D/MyAsyncTask(29285): Thread :5293----send:22 06-02 09:45:12.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:12.215: D/MyAsyncTask(29285): Thread :1----reciver:22 06-02 09:45:13.215: D/MyAsyncTask(29285): Thread :5293----send:23 06-02 09:45:13.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:13.215: D/MyAsyncTask(29285): Thread :1----reciver:23 06-02 09:45:14.215: D/MyAsyncTask(29285): Thread :5293----send:24 06-02 09:45:14.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:14.215: D/MyAsyncTask(29285): Thread :1----reciver:24 06-02 09:45:15.215: D/MyAsyncTask(29285): Thread :5293----send:25 06-02 09:45:15.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:15.215: D/MyAsyncTask(29285): Thread :1----reciver:25 06-02 09:45:16.215: D/MyAsyncTask(29285): Thread :5293----send:26 06-02 09:45:16.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:16.215: D/MyAsyncTask(29285): Thread :1----reciver:26 06-02 09:45:17.215: D/MyAsyncTask(29285): Thread :5293----send:27 06-02 09:45:17.215: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:17.215: D/MyAsyncTask(29285): Thread :1----reciver:27 06-02 09:45:18.220: D/MyAsyncTask(29285): Thread :5293----send:28 06-02 09:45:18.220: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:18.220: D/MyAsyncTask(29285): Thread :1----reciver:28 06-02 09:45:19.220: D/MyAsyncTask(29285): Thread :5293----send:29 06-02 09:45:19.220: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:19.220: D/MyAsyncTask(29285): Thread :1----reciver:29 06-02 09:45:20.225: D/MyAsyncTask(29285): Thread :5293----send:30 06-02 09:45:20.225: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:20.225: D/MyAsyncTask(29285): Thread :1----reciver:30 06-02 09:45:21.225: D/MyAsyncTask(29285): Thread :5293----send:31 06-02 09:45:21.225: D/MyAsyncTask(29285): ----onProgressUpdate()---thread id:1 06-02 09:45:21.225: D/MyAsyncTask(29285): Thread :1----reciver:31 06-02 09:45:21.225: D/MyAsyncTask(29285): ----onPostExecute()---thread id:1---reciver:ABCDEFGHIJKLMNOPQRSTUVWXYZ...ABC
分析:從以上Log日志可以知道,MyAsyncTask中的方法doInBackground方法運行在后臺線程中,而onProgressUpdate方法和onPostExecute方法是運行在GUI線程中的。
總結
以上是生活随笔為你收集整理的Android AsyncTask用法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斐波那契数列与阶乘---递归实现
- 下一篇: Android---手动创建线程与GUI