Android java.lang.Outofmemorry+;进口

Android java.lang.Outofmemorry+;进口,android,out-of-memory,java.lang.class,Android,Out Of Memory,Java.lang.class,我想问你一个简单的问题。 我与java.lang.outofmemory错误进行了斗争。我 t可能是由图片引起的,但目前我的项目中有很多未使用的导入和未使用的变量(应用程序有7个活动,每个活动大约有40个变量) 是否将未使用的导入和未使用的声明变量存储在内存中? 您认为,可能是java.lang.outofmemory错误导致了许多变量和导入吗?否,变量在应用程序的堆中没有占用更多内存。这可能是由于应用程序中的位图造成的。如果您遇到任何错误,请确保您发布了类似于背景的图像 imageview.s

我想问你一个简单的问题。 我与java.lang.outofmemory错误进行了斗争。我 t可能是由图片引起的,但目前我的项目中有很多未使用的导入和未使用的变量(应用程序有7个活动,每个活动大约有40个变量)

是否将未使用的导入和未使用的声明变量存储在内存中?
您认为,可能是java.lang.outofmemory错误导致了许多变量和导入吗?

否,变量在应用程序的
堆中没有占用更多内存。这可能是由于应用程序中的位图造成的。如果您遇到任何错误,请确保您发布了类似于背景的图像

imageview.setBackgroundDrawable(null);
relativeLayout.setBackgroundDrawable(null);

这将删除版面中使用的可绘制图像。

来自Android:

位图占用大量内存,特别是对于像这样的丰富图像 照片。例如,Galaxy Nexus上的相机会拍照 高达2592x1936像素(500万像素)。如果位图配置 使用的是ARGB_8888(Android 2.3以后的默认版本),然后 将此图像加载到内存大约需要19MB的内存(2592*1936*4 字节),立即耗尽某些设备上的每应用程序限制。

基本上,如果使用不当,图像就是杀手

请参阅上的android教程

具体来说,代码示例将以所需的分辨率从文件/资源加载缩放位图


导入在运行时对内存没有影响。他们唯一能做的就是减慢构建时间。没有什么有害的。

不,没有。对于你的两个问题,你的导入与之无关。或者代码的大小。这是您的图片。您的意思是在我完成活动并转到下一个活动时在ondestroy()中使用此代码吗?如果您正在从一个活动移动到另一个活动,请将此代码放置在
onStop()
,因为每当活动进入后台时,都会调用
onStop()
,无论何时,当您返回到主要活动时,都会调用
onResume()
,因此,不要在
layout
中放置任何可绘制内容,而是将可绘制内容按视图的方法
setBackgroundResource()
放置在
onResume()
method@ChintanRathod我想你的意思是,
onPause()
,而不是
onStop()
@doomsnight,onPause()将在调用另一个活动时调用,但onStop()将在另一个活动完成加载时调用。所以,如果您将代码放在
onPause()
中,您会发现您的屏幕首先由于图像的删除而变黑,然后另一个活动开始,但如果您在
onStop()
中编写代码,您将发现应用程序中没有发生任何更改。@chintanthod抱歉,我以为您在隐藏时试图意识到这一点。并将
onResume()重新斜体化。如果您在桌面上执行
操作
,则应初始化
onStart
,否则,当它仅暂停时,您将在
onResume
中重复操作。如果这有道理的话重新激活从未发布的内容。(因为从来没有调用过
onStop
)是的,但我有大小为20KB的*.png图片,大小为200x200px(300x300 px)+背景上的一个图像为700x700 px。活动启动后,背景上的图片使用平移动画。我觉得图片很小,而且我的设备也很坚固。Acer Iconia 500平板电脑。你认为动画会有一些内存需求吗。我觉得这些图片很小,这个错误对我来说很奇怪。@mira你有多少张200x200大小的图片?动画不应该是个问题。一个700x700应该可以,虽然仍然是2mb。从4到12张图片(每个活动不同)+一个背景700 x 700。由于透明度,我使用png文件,一些背景对我来说似乎非常大的数据,大约500-900 kB。但是我没有找到解决方法来进一步减少它们。png文件的位图表示要大得多。每像素4字节。我不确定你到底在做什么。如果您试图从多个图像逐个创建主图像,请打开它们,将它们绘制到主画布,然后关闭它们。因此,一次内存中只有两个图像。若你们在屏幕上显示12个独立的图像,那个么它们应该被缩放,甚至可以在屏幕上显示12个图像。链接中的方法
decodeSampledBitmapFromResource
calculateInSampleSize
用于缩放图像。OOPS感谢您提供的信息。但这对我来说有点难理解。我声明的所有图像都来自XML。6张图片是,1张是。请你有任何关于这样的例子你写的链接,看看代码就明白了吗?
imageview.setBitmapImage(null);