关于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();
}
}
}
相关文章推荐
- 公司项目架构的演变过程
- NSNotification的使用
- 读取配置数据
- 南海争端,你怎么看
- 生产者 消费者 --- 多线程 到 单线程 控制
- 一个收集了502款开源iOS应用的开源项目
- 2016黑龙江省赛problemB *随机数*已知三点求外接圆圆心模板
- Basic Calculator II
- 全球区域区号plist列表(跟微信区号列表数据一致)
- 快乐数问题
- drtools规则使用快速入门
- Asp.Net Core WebApi学习笔记(四)-- Middleware
- 图片javascript缩小
- Redis 学习笔记 数据类型 - set
- getsockopt()和setsockopt()函数详解
- 5. 开放封闭原则
- php-fpm进程数优化方法
- 银行家
- STL"源码"剖析-重点知识总结
- c# DESEncrypt 加密、解密算法