AsycnTask
- AsyncTask主要是用于异步操作的,比如网络请求跟刷新UI操作,网络请求需要在主线程中,刷新UI 需要在子线程中
- execute():启动AsyncTask
- onPreExecute():启动AsyncTask就调用,是在主线程中执行
- doInBackground():onPreExecute()执行完后调用,是在子线程中执行
- onPostExecute():doInBackground()执行后调用的,是在主线程执行 的
- onProgressUpdate():用于实时刷新UI
- AsyncTask<参数一,参数二,参数三>
- 参数一:是execute方法的参数,也是doInBackground()方法的参数
- 第二个参数是publishProgress方法的参数类型,也是onProgressUpdate方法的参数类型
- 第三个参数是从后台返回到前台的数据类型,也是doInBackground()方法的返回值
代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
public void click(View view) {
AsyncTask<String, Integer, String> asyncTask = new AsyncTask<String, Integer, String>() {
@Override
protected void onPreExecute() {
Log.v("lai", "准备中。。。。");
}
@Override
protected String doInBackground(String... params) {
Log.v("lai", params[0]);
for (int i = 1; i <= 100; i++) {
SystemClock.sleep(50);
publishProgress(i);
}
String result = "请求完毕。。。";
return result;
}
@Override
protected void onProgressUpdate(Integer... values) {
tv.setText(values[0].intValue() + "");
}
@Override
protected void onPostExecute(String result) {
Log.v("lai", result);
Toast.makeText(MainActivity.this, "我是吐司", 0).show();
}
};
asyncTask.execute("网络请求开始啦。。。。");
}
}