简介Android 中的AsyncTask

2019-12-10 18:52:26于海丽

MainActivity.java

package vic.wong.main; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
public class MainActivity extends Activity { 
private Button button; 
private ProgressBar progressBar; 
private TextView textView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
button = (Button)findViewById(R.id.button); 
progressBar = (ProgressBar)findViewById(R.id.progressBar); 
textView = (TextView)findViewById(R.id.textView); 
button.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar); 
asyncTask.execute(); 
} 
}); 
} 
}

NetOperator.java

package vic.wong.main; 
//模拟网络环境 
public class NetOperator { 
public void operator(){ 
try { 
//休眠秒 
Thread.sleep(); 
} catch (InterruptedException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 
} 

ProgressBarAsyncTask .java

package vic.wong.main; 
import android.os.AsyncTask; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
/** 
* 生成该类的对象,并调用execute方法之后 
* 首先执行的是onProExecute方法 
* 其次执行doInBackgroup方法 
* 
*/ 
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> { 
private TextView textView; 
private ProgressBar progressBar; 
public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) { 
super(); 
this.textView = textView; 
this.progressBar = progressBar; 
} 
/** 
* 这里的Integer参数对应AsyncTask中的第一个参数 
* 这里的String返回值对应AsyncTask的第三个参数 
* 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改 
* 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作 
*/ 
@Override 
protected String doInBackground(Integer... params) { 
NetOperator netOperator = new NetOperator(); 
int i = ; 
for (i = ; i <= ; i+=) { 
netOperator.operator(); 
publishProgress(i); 
} 
return i + params[].intValue() + ""; 
} 
/** 
* 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) 
* 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置 
*/ 
@Override 
protected void onPostExecute(String result) { 
textView.setText("异步操作执行结束" + result); 
} 
//该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置 
@Override 
protected void onPreExecute() { 
textView.setText("开始执行异步线程"); 
} 
/** 
* 这里的Intege参数对应AsyncTask中的第二个参数 
* 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行 
* onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作 
*/ 
@Override 
protected void onProgressUpdate(Integer... values) { 
int vlaue = values[]; 
progressBar.setProgress(vlaue); 
} 
}