Android异步任务类的运行示例

时间:2022-07-18 20:52:23

1.MainActivity.java

package com.example.activitychange;

import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ThemedSpinnerAdapter;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private Button btn02;
private TextView textView,textView02;
private ProgressBar progressBar;


public void init(){
textView = (TextView)findViewById(R.id.tv01);
textView02 =(TextView)findViewById(R.id.tv02);
progressBar = (ProgressBar)findViewById(R.id.pBar01);
btn02 = (Button) findViewById(R.id.btn02);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);

init();
btn02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

//运行完这个execute()方法之后,会自己运行该类中的其他方法---暂且这么理解
new DownLoadTask().execute();

}
});
}

/*
异步任务类
三个泛型
第一个是传入数据类型
第二个是任务的进度发布数据类型
第三个是任务的返回结果数据类型
*/
class DownLoadTask extends AsyncTask<Void,Integer,String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
textView.setText("任务开始下载……");

}

//专门处理耗时操作,会在子线程中被调用
@Override
protected String doInBackground(Void... voids) {
for(int i = 0;i< 101;i++){
//发布任务的进度
publishProgress(i);

//子线程停止100ms
try {
Thread.sleep(50);
//break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "下载完成";
}

//在异步任务执行完成后调用
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);

textView.setText(s);
}

//进度更新----处理异步任务的进度数据
//与类的第二个泛型参数相同
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progressBar.setProgress(values[0]);
}
}
}
注:

(1)类:AyscTask
1)doInBackground后台执行耗时操作,不能做更新UI的操作
2)主线程:execute() onPreExecute() onProgressUpdate() onPosteExecute()