zoukankan      html  css  js  c++  java
  • AsyncTask下载图片

    最近在看一个非常早期曾经写过代码,装上去召回。本文首先召回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


    注意事项:不能在线程中 new AsyncTask 仅仅能在ui线程中使用。不能在一个对象上调用2次execute方法,仅仅能用一次

    下一篇将具体解破AsyncTask源代码。 若有问题。请指出 谢谢。




    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    关于MQ的对比
    关于RabbitMQ(二)
    关于QPS、TPS、并发用户数、吞吐量的关系
    关于使用Ecplise构建gradle项目
    关于记录一次线上真实环境多线程引发的问题
    关于MySQL——find_in_set()函数的使用
    关于数据库的表连接
    关于Java线程池
    IntelliJ搭建Scala及Spark工程
    idea编写wordcount程序及spark-submit运行
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4915390.html
Copyright © 2011-2022 走看看