核心代码:
package cn.zengfansheng.asynctask;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import cn.zengfansheng.googleasynctask.R;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.tv);
}
/**
* 执行异步任务-使用google提供的重量级异步任务框架来
* @param view
*/
public void click(View view) {
// 第二个参数 是执行过程中进度 的数据类型
new AsyncTask<Void, Integer, Void>() {
// 1、耗时任务之前的逻辑
@Override
protected void onPreExecute() {
super.onPreExecute();
tv.setText("要开始执行耗时任务了...");
}
// 2、后台子线程逻辑
@Override
protected Void doInBackground(Void... params) {
for (int i = 1; i <= 100; i++) {
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);// 要在后台任务进行过程中,更新ui,调用此方法
}
return null;
}
// 3、子线程更新ui调用的方法 发布进度
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
tv.setText("当前进度:" + values[0] + "%");
}
// 4、耗时任务之后的逻辑
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
tv.setText("耗时任务了执行完毕了...");
}
}.execute();
}
} |