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()