闲来无事,写了一个关于AsyncTask的小案例,主要实现进度条的显示,并且在10后走完关闭。
MainActivity 代码如下:
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.example.test1.R;
public class MainActivity extends Activity {
private static final String TAG="TEST";
private MyAsyncTask myTask=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
/**
* 按钮单机事件
* @param v
*/
public void onClick(View v){
if(v.getId()==R.id.start_task){
myTask=new MyAsyncTask(this); //实例化AsyncTask
myTask.execute();
}
}
/**
* AsyncTask的实现
* @author dell
*
*/
private class MyAsyncTask extends AsyncTask<Void,Integer,String>{
private ProgressDialog pd=null;
public MyAsyncTask(Context context){
pd=new ProgressDialog(context,0);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMax(100);
pd.setCancelable(false);
pd.show();
}
//这里放置比较耗时的加载工作
@Override
protected String doInBackground(Void... arg0) {
for (int j = 1; j <= 10; j++) {
publishProgress(10*j); //通知onProgressUpdate() 方法执行
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
//执行完毕后,显示结果,刷新UI
@Override
protected void onPostExecute(String result) {
pd.dismiss();
Toast.makeText(MainActivity.this, "执行完毕", Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
}
//开始执行
@Override
protected void onPreExecute() {
Log.v(TAG, "onPreExecute is execute");
super.onPreExecute();
}
//更新进度条
@Override
protected void onProgressUpdate(Integer... values) {
pd.setProgress(values[0]);
super.onProgressUpdate(values);
}
}
}
界面布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<Button
android:id="@+id/start_task"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start_task"
android:onClick="onClick"/>
</RelativeLayout>