Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android多線程編程-異步任務總結

Android多線程編程-異步任務總結

編輯:關於Android編程

1.主線程裡面不能執行耗時的任務,耗時任務都是在子線程裡面執行的。

a.開啟子線程前,做一些界面初始化的操作。(彈出對話框,在界面上提示用戶正在更新,正在獲取數據等)

b.開啟子線程,在後台執行一個耗時的任務。

c.當後台的任務執行完畢後,發送一個消息,通過主線程更新界面(關閉對話框,彈出吐司,隱藏加載布局等)

2.代碼實現

a.定義抽象類

import android.app.Activity;
import android.os.Handler;

public abstract class MyAsyncTask extends Activity {
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			// 後台任務執行完了.
			onPostExecute();
		};
	};

	public void doSomeThing() {
		onPreExecute();

		new Thread() {
			public void run() {
				doInBackgroud();
				handler.sendEmptyMessage(0);
			};
		}.start();
	}

	/**
	 * 後台執行的任務 在子線程中執行
	 */
	public abstract void doInBackgroud();

	/**
	 * 後台任務執行之前的操作,運行在主線程裡面的\
	 */
	public abstract void onPreExecute();

	/**
	 * 後台任務執行後的操作,運行在主線程
	 */
	public abstract void onPostExecute();

}

b.繼承抽象類

package cn.itcast.asynctask;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;

public class DemoActivity extends MyAsyncTask {
	
	private ProgressDialog pd;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        doSomeThing();
    }

	@Override
	public void doInBackgroud() {
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void onPreExecute() {
		pd = new ProgressDialog(this);
		pd.setMessage("我在執行耗時的操作");
		pd.show();
	}
	@Override
	public void onPostExecute() {
		pd.dismiss();
		Toast.makeText(this, "執行完畢", 0).show();
	}
}


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