看看AsyncTask(1)
AsyncTaskAsyncTask类用于执行后台任务,并将执行结果更新到UI线程。
主要方法
- doInBackground() :在后台处理任务
- onProgressUpdate :更新进度
- publicProgress():像onProgressUpdate()传参
- onPostExecute():最后执行
-
onPreExecute():先前执行。
执行顺序:onPreExecute——>doInBackground——>publicProgress——>onProgressUpdate——>onPostExecute。
应用
异步从网络加载图片
package com.river.mysynctasktest;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class LoadImageTest extends Activity {
static final String URL = "http://www.sxdaily.com.cn/NMediaFile"
+ "/2013/0304/SXRB201303040927000420350949232.jpg";
ProgressBar mProgressBar;
ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loadimagetest);
mProgressBar = (ProgressBar) findViewById(R.id.pg);
mImageView = (ImageView) findViewById(R.id.iv_netImage);
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(URL);
}
// 使用AsyncTask类
class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... arg0) {
String url = arg0[0];
Log.e("url", url);
Bitmap bitmap = null;
InputStream is;
URLConnection conn;
try {
conn = new URL(url).openConnection();
is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bitmap = BitmapFactory.decodeStream(bis);
is.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// 提交异步执行结果
mProgressBar.setVisibility(View.GONE);
if (result != null)
mImageView.setImageBitmap(result);
else
Log.e("error", "bitmap is null");
// Toast.makeText(context, text, duration)
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
mProgressBar.setVisibility(View.VISIBLE);
}
}
}
异步更新进度条
package com.river.mysynctasktest;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
public class LoadProgressTest extends Activity {
ProgressBar mProgressBar;
private MyAsyncTask task;
private Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loadprogress);
mProgressBar = (ProgressBar) findViewById(R.id.pg_test);
task = new MyAsyncTask();
task.execute();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {
// 设置cancel标志
task.cancel(true);
}
}
class MyAsyncTask extends AsyncTask<Void, Integer, Void> {
@Override
protected Void doInBackground(Void... arg0) {
for (int i = 1; i < 100; i++) {
// 如果设置了cancel标志,则跳出循环。
if (isCancelled())
break;
publishProgress(i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
mProgressBar.setVisibility(View.GONE);
Toast.makeText(context, "到达顶点了", Toast.LENGTH_SHORT).show();
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
if (!isCancelled()) {
Log.i("values", values[0] + "");
mProgressBar.setProgress(values[0]);
}
}
}
}