相关疑难解决方法(0)

将图像加载到Bitmap对象时出现奇怪的内存不足问题

我有一个列表视图,每行有几个图像按钮.单击列表行时,将启动新活动.由于相机布局有问题,我不得不建立自己的标签.为结果启动的活动是地图.如果我单击我的按钮启动图像预览(从SD卡加载图像),应用程序将从活动返回到活动返回到listview结果处理程序以重新启动我的新活动,这只是一个图像小部件.

列表视图上的图像预览正在使用光标和ListAdapter.这使得它非常简单,但我不确定如何放置一个经过调整大小的图像(即小的像素大小不像动态src图像按钮那样.所以我只是调整了从手机摄像头下来的图像.

问题是当我试图返回并重新启动第二个活动时,我收到内存不足错误.

  • 有没有办法我可以轻松地逐行构建列表适配器,我可以在运行中调整大小(有点明智)?

这是更好的,因为我还需要对每行中的小部件/元素的属性进行一些更改,因为焦点问题我无法选择带触摸屏的行.(我可以用滚球.)

  • 我知道我可以做一个带外调整大小并保存我的图像,但这不是我想要做的,但是一些示例代码会很好.

一旦我在列表视图上禁用了图像,它再次正常工作.

仅供参考:这就是我的做法:

String[] from = new String[] { DBHelper.KEY_BUSINESSNAME,DBHelper.KEY_ADDRESS,DBHelper.KEY_CITY,DBHelper.KEY_GPSLONG,DBHelper.KEY_GPSLAT,DBHelper.KEY_IMAGEFILENAME  + ""};
int[] to = new int[] {R.id.businessname,R.id.address,R.id.city,R.id.gpslong,R.id.gpslat,R.id.imagefilename };
notes = new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
Run Code Online (Sandbox Code Playgroud)

哪里R.id.imagefilenameButtonImage.

这是我的LogCat:

01-25 05:05:49.877: ERROR/dalvikvm-heap(3896): 6291456-byte external allocation too large for this process.
01-25 05:05:49.877: ERROR/(3896): VM wont let us allocate 6291456 bytes
01-25 05:05:49.877: ERROR/AndroidRuntime(3896): Uncaught handler: thread main exiting due to …
Run Code Online (Sandbox Code Playgroud)

android image bitmap out-of-memory android-bitmap

1252
推荐指数
33
解决办法
60万
查看次数

Android:OutofMemoryError:位图大小超过VM预算,没有理由我可以看到

我有一个OutOfMemory异常,画廊超过600x800像素JPEG.


环境

我一直在使用带有大约600x800像素的JPG图像的Gallery.

由于我的内容可能比图像更复杂,我将每个视图设置为一个RelativeLayout,它将JPView包装在ImageView中.

为了"加速"用户体验,我有一个4个插槽的简单缓存,预取(在一个looper中)左边有1个图像,1个图像右边显示图像并将它们保存在4槽HashMap中.

该平台

我使用的是256 RAM和128堆大小的AVD,屏幕为600x800.它也发生在Entourage Edge目标上,除了使用设备它更难调试.


问题

我一直在例外:

OutofMemoryError: bitmap size exceeds VM budget
Run Code Online (Sandbox Code Playgroud)

并且它在获取第五个图像时发生.我试图改变我的图像缓存的大小,它仍然是相同的.


奇怪的是:应该没有内存问题

为了确保堆限制远离我的需要,我在开始时定义了一个虚拟的8MB数组,并将其保留为未引用,以便立即调度.它是活动线程的成员,定义如下

static { @SuppressWarnings("unused")
byte dummy[] = new byte[ 8*1024*1024 ]; }    
Run Code Online (Sandbox Code Playgroud)

结果是堆大小接近11MB并且它们都是免费的. 注意我在它开始崩溃后添加了这个技巧.它使OutOfMemory不那么频繁.

现在,我正在使用DDMS.在崩溃之前(崩溃后变化不大),DDMS显示:

ID  Heap Size   Allocated   Free       %Used    #Objects
1   11.195 MB   2.428 MB    8.767 MB   21.69%   47,156  
Run Code Online (Sandbox Code Playgroud)

并在详细信息表中显示:

Type  Count  Total Size   Smallest   Largest   Median    Average
free  1,536  8.739MB      16B        7.750MB   24B       5.825KB
Run Code Online (Sandbox Code Playgroud)

最大的块是7.7MB.然而LogCat说:

ERROR/dalvikvm-heap(1923): 925200-byte external allocation too large for this process.
Run Code Online (Sandbox Code Playgroud)

如果你介意中位数和平均值之间的关系,可以假设大多数可用的块非常小.但是,有一个块足够大的位图,它是7.7M.怎么还不够呢?

注意:我记录了一个堆跟踪.在查看分配的数据量时,感觉不会超过2M.它确实与DDMS的可用内存报告相匹配. …

android gallery out-of-memory ddms imageview

34
推荐指数
2
解决办法
3万
查看次数

Android中的位图

我有一些关于Bitmap对象和内存及其一般分类的问题.

  1. 什么是内存或本机位图?
  2. Bitmap内存与堆内存有何不同?

android bitmap

29
推荐指数
3
解决办法
3万
查看次数

android - 创建位图时的内存不足异常

在第二次创建位图后,我收到以下错误:

04-17 18:28:09.310: ERROR/AndroidRuntime(3458): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

this._profileBitmap = Bitmap.createBitmap(_profileBitmap, xCoor,  yCoor, width, height);
Run Code Online (Sandbox Code Playgroud)

从日志:

04-17 18:27:57.500: INFO/CameraCropView(3458): Original Photo Size: W 1536 x H 2048   
04-17 18:28:06.170: INFO/CameraCropView(3458): xCoor: 291   
04-17 18:28:06.170: INFO/CameraCropView(3458): yCoor: 430    
04-17 18:28:06.170: INFO/CameraCropView(3458): Width: 952  
04-17 18:28:06.170: INFO/CameraCropView(3458): Height: 952  
Run Code Online (Sandbox Code Playgroud)

由于图像很大,我得到了错误.但有趣的是错误不是第一次发生,只有当我第二次拍摄时才会发生,这让我相信这个profileBitmap不会被破坏.我该如何清理它?

android memory-leaks bitmap

14
推荐指数
5
解决办法
6万
查看次数

Android内存预防

我有一个列表,显示从网上即时下载的缩略图(小图像).在某些时候,该过程耗尽内存.我如何判断可用内存即将耗尽,以便我可以停止下载更多图像?

我想提前知道它,以免陷入内存不足的边缘.

注意:这不是内存泄漏,只是大量下载的位图.

谢谢.

memory android bitmap download out-of-memory

9
推荐指数
2
解决办法
1万
查看次数

Android Image缓存 - 怎么样?

我认为之前有人询问过,但仍有一些我无法理解的事情.

我尝试了两种不同的方法:

  1. 将所有图像保存在内存中,当某个限制开始超过时,开始删除它们
  2. 让Android使用SoftReferences修复此问题

在2.它只是清理它们有时第二次我分配它们!而且我没有分配太多 - 30-40张50x50像素的图像.

所以我坚持一个.问题是限制是什么?

  1. 我可以从设备上获得一些可靠的信息吗?我还剩下多少位图内存?我做了一些研究,观察DDMS值,它只是占用了越来越多的空间(如果我不清理),直到它爆炸.有一刻只剩下200K了,接下来系统再提供2M ......
  2. 我目前正在使用一些基于设备模型或屏幕大小的启发式决策.从长远来看,我认为这是死路一条.在某些手机上有内存异常,在其他手机上完全免费.
  3. 有第三种解决方案,正确吗?

android image-caching

8
推荐指数
1
解决办法
3097
查看次数

内存不足内存泄漏问题

大家好我正在开发一个使用许多图像和活动的应用程序.它是一个提供应用程序的数字杂志.在我的应用程序中,我应该使用动态Viewgroup图像和textview动态显示所有杂志给用户使用缩略图.我的应用程序是几乎完成.但我真的在努力解决内存问题.

在我的应用程序中,许多内存泄漏即将到来.我在很多地方管理我可以使用System.gc(); .回收(); hashmap和所有其他可能的方法.但我的应用程序仍有同样的问题.

我想找到我的代码中发生内存泄漏的位置.我使用DDMS分配跟踪器,MAT和Heap仍然只是粗略的想法.我想在我的代码中找到它来管理它.

任何人都可以帮我解决这个问题.我被困在这里,我没有办法.:(

memory android memory-leaks memory-management

8
推荐指数
0
解决办法
759
查看次数

Android:Bitmaps,SoftReferences和OOM?

我在垂直LinearLayout中有一系列视图.滚动到时,每个视图都会生成并绘制一个位图.出于性能原因,每次调用onDraw()时我宁愿不生成Bitmap,但出于内存原因,我无法保留对Bitmaps的硬引用.我可以就我应该采取的策略提出建议.

我已经尝试过明显的路径:生成Bitmap,然后用SoftReference包装它.这失败有两个原因.1.参考文献收集得比我预期的要热烈得多.我还是得到了OOM!这是令人震惊的,因为没有Bitmap特别大,所以单个视图不应该导致OOM,让我假设OOM发生,因为违规的SoftReference没有被释放的机会.此外,当我的应用程序的分配堆大小为6mb时(根据DDMS视图),OOM会发生,我希望它在抛出OOM之前增长到16mb.

有什么建议?

heap android memory-management bitmap soft-references

5
推荐指数
1
解决办法
4394
查看次数

android - 内存不足

在我的应用程序中,我正在从网上下载图像.我得到了外出记忆异常.有人建议使用以下代码清除堆.但我仍然面临着内存不足的例外.任何人都可以帮助我.活动开始时调用以下方法.在这里我指的是这个链接

  public void onStart()
{       
     super.onStart();  
     //Handling the out of memory exception
     logHeap(this.getClass());
}    

public static void logHeap(Class clazz) {
    Double allocated = new Double(Debug.getNativeHeapAllocatedSize())/new Double((1048576));
    Double available = new Double(Debug.getNativeHeapSize()/1048576.0);
    Double free = new Double(Debug.getNativeHeapFreeSize()/1048576.0);
    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(2);
    df.setMinimumFractionDigits(2);

    System.out.println("debug. =================================");
    System.out.println("debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free) in [" + clazz.getName().replaceAll("com.myapp.android.","") + "]");
    System.out.println("debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory()/1048576)) + "MB …
Run Code Online (Sandbox Code Playgroud)

android out-of-memory

2
推荐指数
1
解决办法
4313
查看次数

Android中的图库出现内存不足错误

我的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
ImageView iv = new ImageView(mContext); 
Drawable photo = new BitmapDrawable(loadBitmap(URL));
iv.setImageDrawable(photo);
iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);  
return iv; 
}

private Bitmap loadBitmap(String url) {
try {
Bitmap bm = BitmapFactory.decodeStream((InputStream)this.fetch(url));
return bm;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
} 

public Object fetch(String address) {
try {
URL url = new URL(address);
Object content = url.getContent();
return content;
}
catch(Exception e) {
e.printStackTrace();
}
return this;
}
Run Code Online (Sandbox Code Playgroud)

我尝试在图库中查看大约100张带有URL的照片.但是当查看大约10张照片时,发生了内存不足错误.我该怎么做才能避免错误?

我尝试修改getView()如下所示.

@Override
public View …
Run Code Online (Sandbox Code Playgroud)

android gallery

0
推荐指数
1
解决办法
3401
查看次数