缩略可以用,但是也不能缩的太厉害,我现在是缩小了一般,就是decodeStream时候设置options的inSampleSize为至少为2,如果屏幕320*480时候就为3,但是模拟器还是出现了OOM
解决方案 »
- 自己实现铃声播放和音乐播放冲突怎么办?
- 如何获取Android系统时间是24小时制还是12小时制
- socket发送数据包大小的问题
- SurfaceView的双缓冲是什么意思?
- Android从SD卡导入数据库.db文件至APK【原创】
- Android 真机怎么连接电脑上的tomcat
- android调用IKAnalyzer分词器出现内存溢出情况,求大神解决
- 关于android socket 客户端 与服务器通讯!
- 求教:发短信时,我没有指定自己的手机号码,但是收短信会显示,为什么
- 关于java开发android应用中,读取文件的机制的疑惑。请解释下。
- 文件浏览器的问题,如何读脚本文件
- 关于socket异常java.net.SocketException:Bad file number
这个问题。其实很简单。
3部曲
1:软引用。耗吧,我说这个基本没啥用。就是防止挂掉,还是看不了图片的。
2:我还是放代码。public static Bitmap loadImageFromUrl(String url, int sc) {
URL m;
InputStream i = null;
BufferedInputStream bis = null;
ByteArrayOutputStream out = null;
byte isBuffer[] = new byte[1024];
if (url == null)
return null;
try {
m = new URL(url);
i = (InputStream) m.getContent(); bis = new BufferedInputStream(i, 1024 * 4);
out = new ByteArrayOutputStream();
int len = 0;
while ((len = bis.read(isBuffer)) != -1) {
out.write(isBuffer, 0, len);
}
out.close();
bis.close();
} catch (MalformedURLException e1) {
e1.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
}
if (out == null)
return null;
byte[] data = out.toByteArray();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(data, 0, data.length, options);
options.inJustDecodeBounds = false;
int be = (int) (options.outHeight / (float) sc);
if (be <= 0) {
be = 1;
} else if (be > 3) {
be = 3;
}
options.inSampleSize = be;
Bitmap bmp = null;
try {
bmp = BitmapFactory.decodeByteArray(data, 0, data.length, options); // 返回缩略图
} catch (OutOfMemoryError e) {
// TODO: handle exception
System.gc();
bmp = null;
}
return bmp;
}3.暴力设置内存空间
private final static float TARGET_HEAP_UTILIZATION = 0.75f;
private final static int CWJ_HEAP_SIZE = 16 * 1024 * 1024;
VMRuntime.getRuntime()
.setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
第一点,软引用。之前也是一直用,应该是在内存不足的时候被jvm强制回收是吧。后来发现明明内存还有很多,就是远没到内存不足的情况,bitmap还是被回收了,后来看某博主说Android在2.2之后,软引用和弱引用一样,只要gc就没得了。所以确实感觉没啥效果,经常滑着滑着又去网络加载图片
第二点,核心是压缩图片,降低图片质量把。最后那个try catch很给力啊,哈哈
第三点,没有试过,不知道有没有什么后遗症!!