在Android应用程序中,当虚拟机(VM)已满时,如何解决OutOfMemoryError?

13 浏览
0 Comments

在Android应用程序中,当虚拟机(VM)已满时,如何解决OutOfMemoryError?

请查看我应用程序的模型:\n问题:\n如果我从第一页点击“第二页”按钮,它会打开新的第二页的意图\n然后\n我从第二页点击“第三页”按钮,它会转到第三页\n然后\n我再次使用第一页的按钮返回到第一页,然后由于下面的错误“内存不足”导致应用程序崩溃\n错误:\n05-13 11:35:06.417: D/dalvikvm(11948): GC_BEFORE_OOM freed 9K, 19% free 39660K/48583K, paused 36ms, total 36ms\n05-13 11:35:06.417: E/dalvikvm-heap(11948): Out of memory on a 8684816-byte allocation.\n...\n如果有人知道,请分享您的答案,以便我可以解决它。\n谢谢。

0
0 Comments

在Android应用程序中,如果VM已满,可以采取以下两种解决方法:

方法一:在AndroidManifest.xml文件中添加android:largeHeap="true",如果你的应用程序中没有使用太多的大型图片,这是一个比较简单的解决方法。

方法二:使用Outofmemory解决方案链接中提到的方法来加载位图,并在切换活动时回收该位图。这是一个常见的问题,在stackoverflow上有多次提供了解决方案。

如果你的情况与现有的某些问题匹配,最好先阅读现有的问题答案,看看是否有相似的情况,如果没有,可以写出你的情况有什么不同。

以下是一些相关的问题链接:

Strange out of memory issue while loading an image to a Bitmap object

Out of memory exception due to large bitmap size

Android handling out of memory exception on image processing

另外,即使你没有使用位图对象,你仍然可以将图像设置为布局的背景,可以尝试使用ImageView.setImageBitmap(bitmap);来设置布局的背景图像,如果有问题可以随时告诉我。

0
0 Comments

在Android应用程序中,当虚拟机(VM)内存已满时,可能会出现OutOfMemoryError错误。解决此问题的方法如下:

问题原因:

- 当活动离开其状态并转到其他活动时,会调用"onStop()"方法。在此方法中,需要将活动的背景设置为null,以释放内存。

- 当从其他活动返回到当前活动时,将调用"onResume()"方法。在此方法中,需要将活动的背景重新设置为所需的背景图像。

解决方法:

- 在活动的"onStop()"方法中,将RelativeLayout的背景设置为null,以释放内存。

代码示例:

protected void onStop() {
    relativeLayout.setBackgroundDrawable(null);
}

- 在活动的"onResume()"方法中,将RelativeLayout的背景重新设置为所需的背景图像。

代码示例:

protected void onResume() {
    relativeLayout.setBackgroundResource(R.drawable.home_bg);
}

- 如果在背景图像应用之前调整图像大小以适应屏幕,可以减少内存消耗。可以创建一个示例大小来处理图像。

- 如果同时适配平板电脑和手机,需要分别创建适用于不同屏幕尺寸的布局文件夹(例如layout-sw600dp和layout-sw800dp)。在layout-sw800dp文件夹中,可能会使用全分辨率的图像(例如800像素*任意高度),这可能导致超出虚拟机的内存限制。

通过以上方法,可以解决OutOfMemoryError错误。

0
0 Comments

OutOfMemoryError的出现原因是在android应用程序中,如果每次创建一个新的Activity实例而不是从应用程序的堆栈中重用活动,则应用程序的堆栈肯定会耗尽内存。

解决方法:

1. 确保从应用程序的堆栈中重用活动,而不是每次创建一个新的Activity实例。

2. 可以使用Intent标志FLAG_ACTIVITY_REORDER_TO_FRONT来重用活动,以便将活动移到堆栈的前面,而不是创建新的实例。

3. 使用单例模式来确保只有一个实例被创建,这样可以节省内存。例如,使用单例模式来管理网络请求或数据库连接。

4. 当不再需要一个对象时,及时释放资源,如关闭数据库连接、释放位图等。

5. 对于大型数据集,可以考虑使用分页加载或懒加载等技术,以减少内存使用量。

6. 对于大量的图像或文件,可以使用缓存来减少内存使用。可以使用LRU缓存或其他缓存库来管理缓存。

7. 可以尝试调整应用程序的堆大小,通过在AndroidManifest.xml文件中的标签中添加android:largeHeap="true"来增加堆大小。

8. 避免在主线程中进行大量的计算或耗时操作,可以使用异步任务或线程池来执行这些操作。

9. 使用分析工具来检测内存泄漏,并及时修复它们。可以使用Android Studio自带的Memory Profiler工具或其他第三方工具进行分析。

10. 如果以上方法都无法解决问题,可以考虑对应用程序进行性能优化,例如使用更高效的算法、减少资源使用等。

通过以上方法,可以有效地解决在android应用程序中出现OutOfMemoryError时虚拟机内存已满的问题。

0