Android 在某些情况下,性能缓慢且outofmemory异常

Android 在某些情况下,性能缓慢且outofmemory异常,android,user-interface,imageview,apk,Android,User Interface,Imageview,Apk,我对android有点陌生,正在开发一款有10个全屏背景图像视图的应用程序。使用应用程序一段时间后,由于outOfMemory异常,它将强制关闭。我从photoshop designer那里得到了720×1200像素的所有图像。我没有把不同大小的图像放在可绘制的dpi文件夹中,因为我不知道如何缩放。我应该把这个720×1200放在哪里?在哪个可绘图文件夹中?如有任何帮助或明确解释,将不胜感激。提前通知Tnx 我不认为您要寻找的解决方案是针对不同的屏幕密度使用不同的可绘制资源文件夹,但您应该查看以

我对android有点陌生,正在开发一款有10个全屏背景图像视图的应用程序。使用应用程序一段时间后,由于outOfMemory异常,它将强制关闭。我从photoshop designer那里得到了720×1200像素的所有图像。我没有把不同大小的图像放在可绘制的dpi文件夹中,因为我不知道如何缩放。我应该把这个720×1200放在哪里?在哪个可绘图文件夹中?如有任何帮助或明确解释,将不胜感激。提前通知Tnx

我不认为您要寻找的解决方案是针对不同的屏幕密度使用不同的可绘制资源文件夹,但您应该查看以下链接:如何在将位图加载到图像视图之前进行下采样,并确保释放任何未使用的位图,从而更有效地加载位图再长一点

您必须创建不同的尺寸、布局、图像和图标文件以支持所有设备

屏幕密度的变化。

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
制作此布局文件,以便所有设备的布局相同

根据设备给出填充、边距、字体和所有属性

res/layout/main_activity.xml           # For handsets (smaller than 600dp available width)
res/layout-sw600dp/main_activity.xml   # For 7” tablets (600dp wide and bigger)
res/layout-sw720dp/main_activity.xml   # For 10” tablets (720dp wide and bigger)
对于布局

res/layout/my_layout.xml              // layout for normal screen size ("default")
res/layout-large/my_layout.xml        // layout for large screen size
res/layout-xlarge/my_layout.xml       // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml  // layout for extra-large in landscape orientation

用于图像

res/drawable-mdpi/graphic.png         // bitmap for medium-density
res/drawable-hdpi/graphic.png         // bitmap for high-density
res/drawable-xhdpi/graphic.png        // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png       // bitmap for extra-extra-high-density

用于图标

res/mipmap-mdpi/my_icon.png         // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png         // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png        // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png       // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png      // launcher icon for extra-extra-extra-high-density
36x36 (0.75x) for low-density
48x48 (1.0x baseline) for medium-density
72x72 (1.5x) for high-density
96x96 (2.0x) for extra-high-density
180x180 (3.0x) for extra-extra-high-density
192x192 (4.0x) for extra-extra-extra-high-density (launcher icon only; see note above)
用于启动器图标

res/mipmap-mdpi/my_icon.png         // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png         // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png        // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png       // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png      // launcher icon for extra-extra-extra-high-density
36x36 (0.75x) for low-density
48x48 (1.0x baseline) for medium-density
72x72 (1.5x) for high-density
96x96 (2.0x) for extra-high-density
180x180 (3.0x) for extra-extra-high-density
192x192 (4.0x) for extra-extra-extra-high-density (launcher icon only; see note above)
结帐和
官方文档。

这是支持多屏幕密度的一个很好的解释,但我相信OP的问题在于加载完整的位图,而不是在他完成后发布它们。这就是为什么在加载一些后,应用程序最终会OOM。他可以尝试使用Glide,这个库有时可以帮助你控制图像,而不会得到OOMGlide、毕加索、壁画等。任何这些都可以(我个人最喜欢的是Fresco)。如果他只想用位图做他目前正在做的事情,那么使用这些库也可能会有些过火。我已经为xml中的所有ImageView设置了背景,因为它是固定的全屏而不是动态的。所以你说的是使用位图来缩放这些图像@DevsilYes,我会查看我在回答中发布的链接。重点在于高效使用位图,即使是初学者也很容易理解。与在imageView xml创建中包含图像相比,这可能需要更多的工作,但最终这是一个更好的实践,仍然不是一个需要完成的工作量。正如@Devsil所说,在不同的文件夹中包含不同的图像并不能解决您的问题。问题是您需要将图像缩放到图像视图的大小。将一个720x1200图像加载到内存中,一个图像((720x1200)x4)占用3.5mb,这并不多,但您没有提供如何显示图像的任何信息这些图像只是一些布局的背景,我使用Imageview在xml中设置它们,因为它们不会被动态更改。对不起,我听不懂你说的最后一句话。你能解释一下你的意思吗@泰茨基