由于android中使用了太多背景,当内存已满时,如何清除内存

由于android中使用了太多背景,当内存已满时,如何清除内存,android,xml,android-layout,logcat,android-logcat,Android,Xml,Android Layout,Logcat,Android Logcat,大家好,我是android新手,一周前我在这个链接中发布了一个问题,基本上是说当我使用很多不同的背景进行活动时,我遇到了java.lang.outofmemory错误。 因此,作为一名新的开发人员,我一直在寻找一个解决方案,在我从活动开始时如何清除内存,但没有一个是清晰或精确的。然后我偶然发现了这个网站 它准确地描述了我所经历的,除了他们使用了10个活动,而我只使用了4个。然而,当我在我的项目中实现他的代码时,我遇到了空指针异常,在修改了他的代码后,我又回到了原来的状态,开始时出现了同样的内存

大家好,我是android新手,一周前我在这个链接中发布了一个问题,基本上是说当我使用很多不同的背景进行活动时,我遇到了java.lang.outofmemory错误。

因此,作为一名新的开发人员,我一直在寻找一个解决方案,在我从活动开始时如何清除内存,但没有一个是清晰或精确的。然后我偶然发现了这个网站

它准确地描述了我所经历的,除了他们使用了10个活动,而我只使用了4个。然而,当我在我的项目中实现他的代码时,我遇到了空指针异常,在修改了他的代码后,我又回到了原来的状态,开始时出现了同样的内存不足错误。
那么,有谁能告诉我,有谁能告诉我,如何在内存不足的情况下,拥有尽可能多的背景。或者说,像安卓这样出色的安卓系统不允许你仅仅使用超过一定数量的背景吗?帮助?

不是背景数量有限制,而是您加载的每个背景图像都作为位图加载到内存中,并一直保存到活动被销毁为止。如果一个接一个地打开多个活动,则每个背景图像都需要保存在内存中,因此最终会出现内存不足异常

如果您设置了一个大的背景图像,当图像加载到内存中时,您还将在ui线程上遇到一些阻塞

解决这个问题的一种方法是使用imageloader。这将从ui线程解码图像,将其缓存在磁盘上,并将其加载到内存中。如果内存不足,则将从内存中清除图像并回退到磁盘缓存。图像加载时可能会有轻微延迟/淡入,但视觉效果并不差,加载一次后,如果您返回该活动,将立即加载

看看Picaso,它很容易实现,是一个很棒的api或api

我的布局都是RelativeLayouts,第一个子视图(将位于所有其他视图之后)是一个ImageView,其scaleType centercrop和宽度和高度设置为与父视图匹配。当每个活动加载(onCreate)时,只需在布局中获取对imageview的引用,并使用您选择的ImageLoader设置所需的背景图像

另一种选择是在您的资源中有多个背景图像副本,每个副本的大小都调整为完全适合您选择的分辨率(可绘制mdpi/-hdpi/-xhdpi等)。通过这种方式,您可以确保永远不会加载比需要显示的图像大得多的图像,并且您的应用程序在内存消耗方面会更加宽容