Ⅰ android中一张20k的图片,我给他分别添加在10X10与 20X20的两个imageView中,请问他俩谁占得内存大
占的内存一样大, 跟你设置大小没关系,首先是加载图片,然而android 机制不比iOS,不能自动处理图片资源,所以直接加载
Ⅱ Android createBitmap创建大尺寸图像时,内存溢出out of memory(OOM)
BitmapFactory.Options bfOptions=new BitmapFactory.Options();
bfOptions.inDither=false;//使图片不抖动。不是很懂
bfOptions.inPurgeable=true;//使得内存可以被回收
bfOptions.inTempStorage=new byte[12 * 1024]; //临时存储
File file = new File(path);//path:图片的绝对地址
FileInputStream fs=null;
try {
fs = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap bmp = null;
if(fs != null) {
try {
bmp = BitmapFactory.decodeFileDescriptor(fs.getFD(), null, bfOptions); //这样莫非就让bmp到了临时存储的位置?
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fs!=null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
转的。
http://wenku..com/view/c7b20053ad02de80d4d840f9.html
Ⅲ android中用viewflipper来放大量图片时,内存溢出,求助
创建太多图片而不注意回收容易导致内存溢出啊位图很占内存的,而且占的好像是native内存建议创建图片用弱引用包装
或者
自己回收一下
Ⅳ android中使用bitmap时图片过大,内存外溢怎么解决
http://bbs.csdn.net/topics/390722227
这儿有比较好的说法,平时我直接compress方法里设置一下quality就ok了,0~100为压缩质量
Ⅳ android 图片占用内存与什么有关
在开发手机应用的时候,内存是有限的,那使用的时候,就要合理的运用和释放。
那么最占用内存的,估计也是就图片了,有时候,需要在加载一些大量的图片。但是,往往回报内存溢出的错误。看看图片的大小呢,也
不大,也就20KB左右,为什么还是很占内存呢?
原来,将图片转成bitmap 来使用的时候,图片所占的内存,不是它原来的大小,是与 图片的宽度,高度,和颜色深度有关系。
图片实际占用的内存大小 = width * height * 颜色深度
颜色深度:
Bitmap.Config ALPHA_8
Bitmap.Config ARGB_4444
Bitmap.Config ARGB_8888
Bitmap.Config RGB_565
A R G B
透明度 红色 绿色 蓝色
其实这都是色彩的存储方法:我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue,其实所有的可
见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值
Bitmap.Config ARGB_4444 每个像素 占四位
Bitmap.Config ARGB_8888 32 每个像素 占八位
Bitmap.Config RGB_565 16 R占5位 R占6位 B占5位 没有透明度(A)
说白了就ALPHA_8就是Alpha由8位组成
ARGB_4444就是由4个4位组成即16位,
ARGB_8888就是由4个8位组成即32位,
RGB_565就是R为5位,G为6位,B为5位共16位
由此可见:
ALPHA_8 代表8位Alpha位图
ARGB_4444 代表16位ARGB位图
ARGB_8888 代表32位ARGB位图
eg: 一张20KB的图片,宽1024(px)*高1024(px)*图片的颜色模式,就是它所占的真实的内存。
Ⅵ android如何加载超大分辨率图片
因为你要求图片不能缩放,不能降低质量,而且有7M,oom是必须的,所以你能做的只能是加载你看得见的地方,意思就是说剪裁着看,先不加载,按屏幕的分辨率的1.5倍或多一些进行剪裁(这个度自己控件),当向某一个方向滑时,检测坐标如果快超出时,加载右边的下一幅。
这个有点类似于游戏中的地图贴图,也是分块的。
Ⅶ Android 加载大量图片时内存不够用 ,
推荐使用github上的开源项目:universal-image-loader
非常强大,很好用
Ⅷ android 图片占用内存大小怎么计算
1、将图片转化为缩略图再加载: 代码如下 1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 options.inSampleSize = 2; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 该段代码即是读取1.png的缩略图,长度、宽度都只有原图片的1/2。图片大小减少,占用的内存自然也变小了。这么做的弊端是图片质量变差,inSampleSize的值越大,图片的质量就越差。由于各手机厂商缩放图片的算法不同,在不同手机上的缩放图片质量可能会不同。笔者就遭遇过moto手机上图片缩放后质量可以接受,三星手机上同样的缩放比例,质量却差很多的情况。 2、用ARBG_4444颜色模式加载图片: Android中有四种,分别是: ALPHA_8:每个像素占用1byte内存 ARGB_4444:每个像素占用2byte内存 ARGB_8888:每个像素占用4byte内存 RGB_565:每个像素占用2byte内存 Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。 代码如下 1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 options.inPreferredConfig = Bitmap.Config.ARGB_4444; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 以上代码即是将1.png以ARGB_4444模式读出。内存减少虽然不如第一种方法明显,但是对于大多数图片,看不出与ARGB_8888模式有什么差别。不过在读取有渐变效果的图片时,可能有颜色条出现。另外,会影响图片的特效处理。 3、调用图片的recycle()方法: 这个其实不是真正降低图片内存的方法。主要目的是标记图片对象,方便回收图片对象的本地数据。图片对象的本地数据占用的内存最大,而且与程序Java部分的内存是分开计算的。所以经常出现Java heap足够使用,而图片发生OutOfMemoryError的情况。在图片不使用时调用该方法,可以有效降低图片本地数据的峰值,从而减少OutOfMemoryError的概率。不过调用了recycle()的图片对象处于“废弃”状态,调用时会造成程序错误。所以在无法保证该图片对象绝对不会被再次调用的情况下,不建议使用该方法。特别要注意已经用setImageBitmap(Bitmap img)方法分配给控件的图片对象,可能会被系统类库调用,造成程序错误。 4、使用Matrix对象放大的图片如何更改颜色模式: 虽然使用Matrix对象放大图片,必定会耗费更多的内存,但有时候也不得不这样做。放大后的图片使用的ARGB_8888颜色模式,就算原图片是ARGB_4444颜色模式也一样,而且没有办法在放大时直接指定颜色模式。可以采用以下办法更改图片颜色模式。 代码如下 Matrix matrix = new Matrix(); float newWidth = 200;//图片放大后的宽度 float newHeight = 300;//图片放大后的长度 matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight()); Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的图片 img2 = img1.(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444颜色模式的图片 img = null; img1 = null; 这里比起原来的图片额外生成了一个图片对象img1。但是系统会自动回收img1,所以实际内存还是减少了。
Ⅸ Android如何解决因使用大量图片而导致的内存泄露问题
Android分配给图片但内存只有8M,所以当很多图片使用但时候就设计到了内存泄漏问题,网上只是简单但说了要recycle()一下,那是在使用Bitmap的时候,那么如果使用图片的时候没有涉及到Bitmap呢?
下面的是一个程序,可以运行,但是如果图片较多会出现内存泄漏,请问怎么解决呢
我用的是ubuntu11.04运行出了这个问题,但是用手机测试以及windows没有问题。不过因使用大量图片引起的内存泄露的确是个问题,所以要解决它才能以防后患,希望各位高手能够解答。
博客园的农民伯伯说是:写一个全局的资源管理类,用Map和软引用来保存这些图片资源,而不是直接引用资源文件
但是还没有理解,如果有可以解决的跟大家分享一下哈
Java代码
package com.loulijun.imageswitcher;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;
public class ImageSwitcherActivity extends Activity implements ViewFactory {
private ImageSwitcher is;
private Gallery gallery;
//图片资源
private Integer[] thumbs = {
R.drawable.yuanyuan01,
R.drawable.yuanyuan02,
R.drawable.yuanyuan03,
R.drawable.yuanyuan04,
R.drawable.yuanyuan05,
R.drawable.yuanyuan06,
R.drawable.yuanyuan07,
R.drawable.yuanyuan08
};
private Integer[] imgIds = {
R.drawable.yuanyuan01,
R.drawable.yuanyuan02,
R.drawable.yuanyuan03,
R.drawable.yuanyuan04,
R.drawable.yuanyuan05,
R.drawable.yuanyuan06,
R.drawable.yuanyuan07,
R.drawable.yuanyuan08
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置为全屏模式
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
is = (ImageSwitcher)findViewById(R.id.switcher);
is.setFactory(this);
//淡入淡出
is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
gallery = (Gallery)findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemSelectedListener(new Gallery.OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
is.setImageResource(imgIds[arg2]);
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
public View makeView() {
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return i;
}
public class ImageAdapter extends BaseAdapter
{
//重写构造方法
private Context context;
public ImageAdapter(Context c)
{
context = c;
}
//返回图片的个数
public int getCount() {
// TODO Auto-generated method stub
return thumbs.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv = new ImageView(context);
iv.setImageResource(thumbs[position]);
iv.setAdjustViewBounds(true);
iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
return iv;
}
}
}
Ⅹ 如何及时清理Android里WebView的内存,尤其是大量图片的内存
试试腾讯手机管家
打开腾讯手机管家——清理加速
腾讯手机管家可以清理垃圾文件、缓存文件、软件的残余、和多余的安装包。
然后小火箭还可以清理加速内存哟
打开腾讯手机管家——悬浮窗——小火箭