原文地址:http://fycoder.com/FYCblog/?p=328
参考:http://blog.csdn.net/cjjky/article/details/6684959
代码如下:
package com.fycoder;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
public class LiuyActivity extends Activity{
private ProgressDialog progressDialog = null;
private String showmsg = "ShowMsg" ;
private Button b ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
//progressDialog = new ProgressDialog(this);
//progressDialog.setTitle("请稍等");
//progressDialog.setMessage("正在加载...");
b =(Button)findViewById(R.id.button315);
progressDialog = ProgressDialog.show(LiuyActivity.this, "请稍等...", "获取数据中...", true);
new LiuyAsynTask().execute("第一个参数");
}
/**
* @author liuy
*
* 参数:
* 第一个为doInBackground接受的参数,
* 第二个为显示进度的参数,
* 第三个为doInBackground返回和onPostExecute传入的参数
* */
private class LiuyAsynTask extends AsyncTask<String, Void, String[]> {
/**
* onPreExecute():
* 该方法将在执行实际的后台操作前被UI 线程调用。
* 可以在该方法中做一些准备工作,如在界面上显示
* 一个进度条,或者一些控件的实例化,这个方法可
* 以不用实现。
* */
@Override
protected void onPreExecute () {
super.onPreExecute();
progressDialog.show(); //显示等待状态条
}
/**
* doInBackground(Params...):
* 将在 onPreExecute 方法执行后马上执行,该方法运行在后台线程中。
* 这裏将主要负责执行那些很耗时的后台处理工作。可以调用
* publishProgress
* 方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
* */
@Override
protected String[] doInBackground (String... params) {
String[] result = new String[2];
result[0]="ret1";
result[1]="ret2";
Log.w(showmsg, "doInBackground()显示传进的参数 params[0]:"+params[0]);
//---- 耗时,等待一些时间 -----
for (int i=0 ;i<999000000;i++){
int a = 1+1+1*8*8*8*8*8*9 ;
}
//---------
// b.setText("^_^"); //在此处修改 Activity上的UI内容会报错,
//只可在onPostExecute里修改才行
return result;
}
/**
* onPostExecute(Result):
* 在doInBackground 执行完成后,onPostExecute方法将被UI
* 线程调用,后台的计算结果将通过该方法传递到UI线程,并且在界
* 面上展示给用户.
* */
@Override
protected void onPostExecute (String[] result) {
super.onPostExecute(result);
Log.w(showmsg, "onPostExecute()显示传进的参数 result[0]:"+result[0]);
Log.w(showmsg, "onPostExecute()显示传进的参数 result[1]:"+result[1]);
progressDialog.dismiss(); //关闭等待进度条
//在按钮上设置需要修改的内容
// 注: Activity 上的 UI的一些修改,在onPostExecute 才能
// 正确执行,若在doInBackground里修改 Activity UI内容会报错。
b.setText("^_^");
}
/**
* onCancelled()
* 在用户取消线程操作的时候调用。在主线程中调用
* onCancelled()的时候调用
* */
}
}
/**
* 可参考:
* http://blog.csdn.net/cjjky/article/details/6684959 Android中AsyncTask的简单用法
*
* */
main2.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <Button android:id="@+id/button315" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="old msg" /> </LinearLayout>
LogCat显示:
14:28:32: W/ShowMsg: doInBackground()显示传进的参数 params[0]:第一个参数
14:28:40: W/ShowMsg: onPostExecute()显示传进的参数 result[0]:ret1
14:28:40: W/ShowMsg: onPostExecute()显示传进的参数 result[1]:ret2