标签:
最近在看一个非常早期曾经写过代码,装上去召回。本文首先召回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源代码。 若有问题。请指出 谢谢。
版权声明:本文博主原创文章,博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4915390.html