关于AsyncTask的理解

来源:互联网 发布:财经数据日历 编辑:程序博客网 时间:2024/05/21 08:45


package com..asynctaskdemo;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
 
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 执行异步任务
new MyAsyncTask().execute("http://www.baidu.com");
}
 
// 第一个泛型就是doInBackground的参数类型, 也是execute方法的参数类型
// 第二个泛型是onProgressUpdate的参数类型, 也是publishProgress方法的参数类型
// 第三个泛型是doInBackground的返回值类型, 也是onPostExecute方法的参数类型
private class MyAsyncTask extends AsyncTask<String, Integer, String> {
private ProgressDialog mPd;
 
// 在doInBackground方法之前调用, 这个方法在主线程中
@Override
protected void onPreExecute() {
super.onPreExecute();
// 可以做一些准备工作
Log.i(TAG, "onPreExecute: " + Thread.currentThread().getName());
mPd = new ProgressDialog(MainActivity.this);
mPd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mPd.setMax(5);
mPd.show();
}
 
// 在后台(子线程)做一些事情, 可以在这个方法里做耗时操作
@Override
protected String doInBackground(String... params) {
// SystemClock.sleep(1000);
Log.i(TAG, "doInBackground: " + Thread.currentThread().getName());
String param = params[0];
Log.i(TAG, param);//"http://www.baidu.com"
for (int i = 0; i < 5; i++) {
// 发布进度
publishProgress(i);
SystemClock.sleep(300);
}
return "成功";
}
// 当调用了publishProgress后, 这个方法会被调用, 这个方法在主线程中
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mPd.setProgress(values[0]);
}
 
// 当doInBackground方法执行完之后调用, 这个方法在主线程中
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.i(TAG, "onPostExecute: " + Thread.currentThread().getName());
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
mPd.dismiss();
}
 
}
}
package com..asynctaskdemo;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
 
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 执行异步任务
new MyAsyncTask().execute("http://www.baidu.com");
}
 
// 第一个泛型就是doInBackground的参数类型, 也是execute方法的参数类型
// 第二个泛型是onProgressUpdate的参数类型, 也是publishProgress方法的参数类型
// 第三个泛型是doInBackground的返回值类型, 也是onPostExecute方法的参数类型
private class MyAsyncTask extends AsyncTask<String, Integer, String> {
private ProgressDialog mPd;
 
// 在doInBackground方法之前调用, 这个方法在主线程中
@Override
protected void onPreExecute() {
super.onPreExecute();
// 可以做一些准备工作
Log.i(TAG, "onPreExecute: " + Thread.currentThread().getName());
mPd = new ProgressDialog(MainActivity.this);
mPd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mPd.setMax(5);
mPd.show();
}
 
// 在后台(子线程)做一些事情, 可以在这个方法里做耗时操作
@Override
protected String doInBackground(String... params) {
// SystemClock.sleep(1000);
Log.i(TAG, "doInBackground: " + Thread.currentThread().getName());
String param = params[0];
Log.i(TAG, param);//"http://www.baidu.com"
for (int i = 0; i < 5; i++) {
// 发布进度
publishProgress(i);
SystemClock.sleep(300);
}
return "成功";
}
// 当调用了publishProgress后, 这个方法会被调用, 这个方法在主线程中
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mPd.setProgress(values[0]);
}
 
// 当doInBackground方法执行完之后调用, 这个方法在主线程中
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.i(TAG, "onPostExecute: " + Thread.currentThread().getName());
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
mPd.dismiss();
}
 
}
}
0 0
原创粉丝点击