zoukankan      html  css  js  c++  java
  • Android如何异步获取图片

    在页面跳转过程中,如果target activity中包含有图片,可以在target activty的oncreate中启动一个线程去拿取图片,在target activity onstop

    是,可以结束该线程。笔者曾经做过测试,如果在跳转之前那图片的话,时间是跳转之后拿图片的1.5倍。推荐使用android中内置线程AsyncTask,因为该线程和thread最大的不同是可以随时stop该线程,而不像thread一旦run起来,

    内置方法里面根本没有办法取消它。

    if (updateImageTask != null) {
    				if (updateImageTask.getStatus() == AsyncTask.Status.RUNNING || updateImageTask.getStatus() == AsyncTask.Status.PENDING) {
    					Log.d(TAG, "~~~!!!!! Canceled update task in back event......");
    					updateImageTask.cancel(true);
    				}
    }
    

    效果如下:

    下面将该方法贴出来:

    1.首先在oncreate 中声明一下:

    updateImageTask = new UpdateImageAsyncTask();
    updateImageTask.execute(null);
    

    2. doInBackground,onProgressUpdate,首先是从队列中拿出对用的图片url,从网络中拿到bitmap,把该信息放在list中,最后传给根据index

    传给相应的view

    在具体代码如下:

    	private class UpdateImageAsyncTask extends AsyncTask<Object, Object, Object> {
    		@Override
    		protected Object doInBackground(Object... params) {
    			ArrayList<Object[]> resultList = new ArrayList<Object[]>();
    			for (int i = 0; i < 4; i++) {
    				resultList.add(null);
    			}
    			GetCatalogHomePageBlock catalogEditorsBlock = null;
    			if (Constant.isTrueDrivce)
    				catalogEditorsBlock = (GetCatalogHomePageBlock) getCatalogHomePageparsing.getBlockObjectByBlockPosition(getCatalogHomePageRsp, "B");
    			else
    				catalogEditorsBlock = (GetCatalogHomePageBlock) getCatalogHomePageparsing.getBlockObjectByBlockPosition(getCatalogHomePageRsp, "A");
    
    			if (catalogEditorsBlock != null) {
    				ArrayList catalogEditorsBlockContents = (ArrayList) getCatalogHomePageparsing.getCatalogEditorsBlockContentFromBlockObj(catalogEditorsBlock);
    				if (catalogEditorsBlockContents != null) {
    					for (int x = 0; x < catalogEditorsBlockContents.size(); x++) {
    						CatalogEditorsBlockContent catalogEditorsBlockContent = (CatalogEditorsBlockContent) catalogEditorsBlockContents.get(x);
    						String contentName = catalogEditorsBlockContent.getContentName();
    						String smallLogo = catalogEditorsBlockContent.getSmallLogo() == null ? "" : catalogEditorsBlockContent.getSmallLogo();
    						String contentID = catalogEditorsBlockContent.getContentID();
    						if (x > 3) {
    							break;
    						}
    						Object[] obj;
    						switch (x) {
    						case 0:
    							bitmap0 = displayImage(IMAGEHOSTURL + smallLogo, contentID);
    							obj = new Object[] { contentName, contentID, bitmap0, smallLogo };
    							resultList.add(x, obj);
    							break;
    						case 1:
    							bitmap1 = displayImage(IMAGEHOSTURL + smallLogo, contentID);
    							obj = new Object[] { contentName, contentID, bitmap1, smallLogo };
    							resultList.add(x, obj);
    							break;
    						case 2:
    							bitmap2 = displayImage(IMAGEHOSTURL + smallLogo, contentID);
    							obj = new Object[] { contentName, contentID, bitmap2, smallLogo };
    							resultList.add(x, obj);
    							break;
    						case 3:
    							bitmap3 = displayImage(IMAGEHOSTURL + smallLogo, contentID);
    							obj = new Object[] { contentName, contentID, bitmap3, smallLogo };
    							resultList.add(x, obj);
    							break;
    
    						}
    
    					}
    					publishProgress(resultList.toArray());
    				}
    				catalogEditorsBlockContents = null;
    			}
    			return null;
    		}
    
    		protected void onProgressUpdate(Object... values) {
    			showImages(values);
    		}
    
    	}
    

    3.最后在onkey事件back cancel当前获取图片线程

    	if (updateImageTask != null) {
    				if (updateImageTask.getStatus() == AsyncTask.Status.RUNNING || updateImageTask.getStatus() == AsyncTask.Status.PENDING) {
    					Log.d(TAG, "~~~!!!!! Canceled update task in back event......");
    					updateImageTask.cancel(true);
    				}
    	}
    

  • 相关阅读:
    爬虫第二弹之http协议和https协议
    爬虫第一弹之py爬虫的相关概念
    Flask第十四篇- Flask-Session组件、WTForms组件、数据库连接池(POOL)
    Flask第十三篇- flask请求上下文源码解读、http聊天室单聊/群聊(基于gevent-websocket)
    Flask第十二篇- flask中的CBV、werkzeug+上下文初步解读、偏函数和线程安全
    Flask第十一篇装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)
    Flask第十八篇 Flask-Migrate
    Flask第十七篇 Flask-Scrip
    Flask第十六篇 Flask-SQLAlchemy
    Flask第十篇 before_request after_request
  • 原文地址:https://www.cnblogs.com/budoudou/p/2105007.html
Copyright © 2011-2022 走看看