Android多线程编程-异步任务总结

来源:互联网 发布:购买的淘宝音乐怎么用 编辑:程序博客网 时间:2024/05/29 18:37

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();    }@Overridepublic void doInBackgroud() {try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}}@Overridepublic void onPreExecute() {pd = new ProgressDialog(this);pd.setMessage("我在执行耗时的操作");pd.show();}@Overridepublic void onPostExecute() {pd.dismiss();Toast.makeText(this, "执行完毕", 0).show();}}


0 0