最近在看很早以前写过的代码,把一些东西回顾一下。本文先回顾一下AsyncTask的基本使用. AsyncTask说简单点就是 开启一个线程,并且把结果提交给ui线程。
Thread+Handler,不过里面做了一些封装 减轻了我们维护线程的麻烦。
先来写一个简单的例子,异步下载一个图片,显示到ImageView中。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyTask().execute("http://www.baidu.com/img/bdlogo.png");//下载一个baidu的logo
}
//第一个参数的需要处理的数据,第二个参数是进度值,第三个参数是处理结果的类型
public class MyTask extends AsyncTask<String,Integer,Bitmap> {
@Override
protected void onPostExecute(Bitmap result) {
Log.d("", "onPostExecute");
updateImageView(result);
}
@Override
protected void onPreExecute() {
Log.d("", "onPreExecute");
}
@Override
protected Bitmap doInBackground(String... args) {
String website = args[0];
HttpURLConnection conn = null;
InputStream ins = null;
try {
URL url = new URL(website);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setDoInput(true);
if (conn.getResponseCode() == 200) {
Log.d("", "get image is ok");
ins = conn.getInputStream();
return BitmapFactory.decodeStream(ins);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ins != null) {
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
public void updateImageView(Bitmap result) {
if (result != null) {
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(result);
}
}
}
onProgressUpdate这里没有写 是更新进度值的。通过调用publishProgress
下一篇将详细解破AsyncTask源码。 若有问题,请指出 谢谢。