Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android簡易實戰教程-- AsyncTask異步倒計時

Android簡易實戰教程-- AsyncTask異步倒計時

編輯:關於Android編程

本篇小案例,完成一個倒計時。方式選擇AsyncTask。代碼貼在下面:

布局文件soeasy:

 



    

接著活動代碼:
package com.example.asynctask;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

	private TextView tv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv = (TextView) findViewById(R.id.tv);
	}

	public void start(View v) {
		//@1:對應的參數是:1、doInBackground回調中的傳入的參數類型;2、執行任務的參數類型
		//@2:進度參數,與進度有關。onProgressUpdate的參數類型
		//@3:1、doInBackground的返回值類型;2、執行結果onPostExecute傳入的參數類型
		new AsyncTask() {
			
			@Override
			protected void onPreExecute() {
				// 准備執行前調用,用於界面初始化操作
				
			}
			
			@Override
			protected Integer doInBackground(Integer... params) {
				// 子線程,耗時操作
				int start = params[0];
				int end = params[1];
				
				int result = 0;
				for (int i = end; i >= start; i--) {
					SystemClock.sleep(20);
					result = i;
					publishProgress(result);//把進度推出去,推給onProgressUpdate參數位置
				}
				return result;
			}
			
			@Override
			protected void onProgressUpdate(Integer[] values) {
				//主線程執行的回調,可更新進度。values為doInBackground調用publishProgress時候推過來的參數。這裡每次推一個。因此數組長度就是0
				int progress = values[0];
				tv.setText(progress+"");
			};
			
			@Override
			protected void onPostExecute(Integer result) {
				// 執行完成的回調,即獲得數據後的回調
				tv.setText(result+"");
			}
			
		}.execute(0,100);
	}
}

對於AsyncTask的詳細分析,請關注《Android進階》專欄介紹。上面的代碼注釋也很清晰,運行看看效果:

 

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved