测试环境为Adnroid 2.1以上。

1:AndroidManifest.xml 权限配置:

添加互联网访问权限:

<uses-permission android:name="android.permission.INTERNET" />

2.异步图片类 ImageDownloadTask 

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;public class ImageDownloadTask extends AsyncTask<Object, Object, Bitmap> {private ImageView imageView = null;/**** 这里获取到手机的分辨率大小* */public  void setDisplayWidth(int width) {_displaywidth = width;}public  int getDisplayWidth() {return _displaywidth;}public  void setDisplayHeight(int height) {_displayheight = height;}public  int getDisplayHeight() {return _displayheight;}public  int getDisplayPixels() {return _displaypixels;}private  int _displaywidth = 480;private  int _displayheight = 800;private  int _displaypixels = _displaywidth * _displayheight;@Overrideprotected Bitmap doInBackground(Object... params) {// TODO Auto-generated method stubBitmap bmp = null;imageView = (ImageView) params[1];try {String url = (String) params[0];bmp = getBitmap(url, _displaypixels,true);} catch (Exception e) {return null;}return bmp;}protected void onPostExecute(Bitmap result) {if (imageView != null&&result!=null) {imageView.setImageBitmap(result);if (null != result && result.isRecycled() == false)System.gc();}}/*** 通过URL获得网上图片。如:http://www.xxxxxx.com/xx.jpg* */public Bitmap getBitmap(String url, int displaypixels, Boolean isBig) throws MalformedURLException, IOException {Bitmap bmp = null;BitmapFactory.Options opts = new BitmapFactory.Options();InputStream stream = new URL(url).openStream();byte[] bytes = getBytes(stream);//这3句是处理图片溢出的begin( 如果不需要处理溢出直接 opts.inSampleSize=1;)opts.inJustDecodeBounds = true;BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);opts.inSampleSize = computeSampleSize(opts, -1, displaypixels);//endopts.inJustDecodeBounds = false;bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);return bmp;}/*** 数据流转成btyle[]数组* */private byte[] getBytes(InputStream is) {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] b = new byte[2048];int len = 0;try {while ((len = is.read(b, 0, 2048)) != -1) {baos.write(b, 0, len);baos.flush();}} catch (IOException e) {e.printStackTrace();}byte[] bytes = baos.toByteArray();return bytes;}/*****    处理图片bitmap size exceeds VM budget (Out Of Memory 内存溢出)*/private int computeSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {int initialSize = computeInitialSampleSize(options, minSideLength,maxNumOfPixels);int roundedSize;if (initialSize <= 8) {roundedSize = 1;while (roundedSize < initialSize) {roundedSize <<= 1;}} else {roundedSize = (initialSize + 7) / 8 * 8;}return roundedSize;}private int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {double w = options.outWidth;double h = options.outHeight;int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength));if (upperBound < lowerBound) {return lowerBound;}if ((maxNumOfPixels == -1) && (minSideLength == -1)) {return 1;} else if (minSideLength == -1) {return lowerBound;} else {return upperBound;}}
}

3.测试调用代码

@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ImageDownloadTask imgtask =new ImageDownloadTask();/**这里是获取手机屏幕的分辨率用来处理 图片 溢出问题的。begin*/DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);imgtask.setDisplayWidth(dm.widthPixels);imgtask.setDisplayHeight(dm.heightPixels);//endImageView imageView_test= (ImageView)findViewById(R.id.imageView_test);imgtask.execute("http://pic.qukantu.com/big/7515/201201031116491.jpg",imageView_test);}

4.小结

主要是通过   extends AsyncTask<Object, Object, Bitmap> 来实现异步的。

图片Out Of Memory 内存溢出 这一块操作,在实际应用中应该考虑淡定抽取出来。这里为了方便放进来了。 溢出处理实际上就是获得设备分辨率把图片进行压缩。

转载于:https://www.cnblogs.com/yeqw1985/archive/2013/02/06/2908190.html

Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题相关推荐

  1. python requests 异步调用_python - 如何使用requests_html异步获取()URL列表? - 堆栈内存溢出...

    我正在尝试使用python包resuqests_html异步获取()URL列表,类似于使用Python 3.6.5和request_html 0.10.0 的README中的异步示例 . 我的理解是, ...

  2. Android中获取网络图片的三种方法

    android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用 ...

  3. Android异步下载网络图片(其二:AsyncTask)

    在上一节中,我们使用Handler.Thread/Runnable .URL.HttpURLConnection等等来进行异步下载网络图片. 但是采用这种方式有一些缺点,如下: 线程的开销较大,如果每 ...

  4. Android异步下载网络图片(其三:ExecutorService)

    在第一节中,我们使用Handler.Thread/Runnable .URL.HttpURLConnection等等来进行异步下载网络图片.然后第二节中换了AsyncTask方式.那么这一节我们再应用 ...

  5. 【Android】获取当前的app中cpu和内存的百分比 -调研报告

    背景 项目要求获取当前app运行时的cpu和内存状况. 调研 CPU获取 Android实现获取当前的app的cpu实时使用情况的代码 以下是获取当前app的CPU实时使用情况的代码(Java): p ...

  6. android内存溢出错误,Android Studio 生成 JavaDoc 空指针异常|文档编码出错|内存溢出...

    一般使用Android Studio生成 JavaDoc会有三个问题: 1.空指针异常 Tools --> Generate JavaDoc -->打开对话框活,在"Other ...

  7. android asyc异步获取网络图片为bitmap,异步之AsyncTask(一)

    插图.png 导读 在Android中每一个应用都拥有自己的独立进程,而一个进程可以拥有多个线程,在这些线程中有一个线程叫做MainThread(也叫UIThread).它负责显示.更新UI,与用户交 ...

  8. Android ListView异步获取网络图片

    今天做项目的时候,导师要求我在Listview做加载图片采用异步加载的方式. 我就上网找了一个例子学习了一下. 我贴一个地址,大家可以去学习一下. ListView异步加载网络图片完美版之双缓存技术 ...

  9. Android异步下载网络图片(其一:Handler)

    项目中有时候需要获取网络上的图片,并下载下来到手机客户端显示.怎么做呢? 实现思路是: 1:在UI线程中启动一个线程,让这个线程去下载图片. 2:图片完成下载后发送一个消息去通知UI线程 2:UI线程 ...

最新文章

  1. 双显卡单独分辨率_CPU、GPU双重碾压!AMD RX 6000系列显卡正式发布 16G显存吊锤RTX 30...
  2. R语言dplyr包pull函数抽取dataframe数据列实战
  3. POJ 1035, Spell checker
  4. [学习笔记] css中的line-height
  5. 图片鉴黄大赛上线,请开始你的表演
  6. scikit-learn学习笔记
  7. Swift 周报 第十期
  8. excel查找空值快捷键_Excel快捷键查询
  9. USB 3.0 高清音视频采集芯片——MS2130
  10. excel宏 批量生成返回目录
  11. 企业微信审批功能有哪些?审批人如何设置?
  12. rocketdock 打不开 有进程
  13. 2022第四届中国(山东)国际大健康产业博览会,即将开幕
  14. 关于LyfUpload 错误 #x27;80020009#x27; 下标越界的错误,还请大侠们帮帮忙!!!
  15. TS+vue3 页面红色波浪线(和声明类型有关)
  16. 用JavaScript判断一个数是否是素数
  17. MVTec AD—A Comprehensive Real-World Dataset for Unsupervised Anomaly Detection 2019 CVPR
  18. [2019长沙长郡中学集训]加法
  19. Android Studio Chipmunk | 2021.2.1 Patch 2(2022 年 8 月)
  20. 小程序SetTimeOut的一个坑

热门文章

  1. 哲学家都在干些什么_哲学家们都干了些什么——哲学是什么
  2. 什么是CloudComputing
  3. 为什么越来越多的人喜欢自驾游?
  4. 辞职在家全职炒股需要什么条件?
  5. 20多年前我住的平房
  6. 做本地杂志如何赚钱?
  7. 黄奕:我之前弄了一个母婴网站,根本就不会做生意,几个月上千万就赔进去了
  8. 普通人赚钱方法,千万别想靠创业,就能一次翻身
  9. 总结目前做得好的新实体店,大致有如下几点
  10. Elasticsearch查询速度为什么这么快?