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();
	}
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。