获取线程池的方法 ExecutorService

ExecutorService 异步线程下载


	/**
	 * 下载Image的线程池
	 */
	private ExecutorService mImageThreadPool = null;


	/**
	 * 获取线程池的方法
	 * @return
	 */
	public ExecutorService getThreadPool()
	{

		synchronized (ExecutorService.class)  //同步的
		{
			if (null == mImageThreadPool)
			{
				//用2个线程来下载图片
				mImageThreadPool = Executors.newFixedThreadPool(2);
			}
		}
		return mImageThreadPool;
	}

	/**
	 * 先从内存缓存中获取Bitmap,如果没有就从SD卡或者手机缓存中获取,SD卡或者手机缓存
	 * 没有就去下载
	 * @param url
	 * @param listener
	 * @return
	 */
	@SuppressLint("HandlerLeak")
	public void downloadImage(final String url, final onImageLoaderListener listener)
	{
		final Handler handler = new Handler()
		{
			@Override
			public void handleMessage(Message msg)
			{
				super.handleMessage(msg);
				listener.onImageLoader((Bitmap) msg.obj, url);
			}
		};
		//我们没有创建此目录保存文件就会保存
		final String subUrl = url.replaceAll("[^\\w]", "");
		getThreadPool().execute(new Runnable()
		{
			@Override
			public void run()
			{
				Bitmap bitmap = getHttpBitmap(url);
				Message msg = handler.obtainMessage();
				msg.obj = bitmap;
				handler.sendMessage(msg);
				//将Bitmap 加入内存缓存
				addBitmapToMemoryCache(subUrl, bitmap);
			}
		});
	}

/**
	 * 取消正在下载的任务
	 */
	public synchronized void cancelTask()
	{
		if (mImageThreadPool != null)
		{
			mImageThreadPool.shutdownNow();
			mImageThreadPool = null;
		}
	}

	/**
	 * 异步下载图片的回调接口
	 */
	public interface onImageLoaderListener
	{
		void onImageLoader(Bitmap bitmap, String url);
	}

	/** 
	* 获取网落图片资源  
	* @param url 
	* @return 
	*/
	private Bitmap getHttpBitmap(String url)
	{
		Bitmap bitmap = null;
		try
		{
			URL myFileURL = new URL(url);
			HttpURLConnection conn = (HttpURLConnection) myFileURL.openConnection();
			conn.setConnectTimeout(6000);
			conn.setDoInput(true);
			conn.setUseCaches(false);
			InputStream is = conn.getInputStream();
			bitmap = BitmapFactory.decodeStream(is);
			is.close();
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return bitmap;
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值