您的位置:首页 > 其它

关于AsyncTask的理解

2016-07-15 09:11 162 查看
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, Inte
1aa70
ger, 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();
}
 
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: