我一直在搜索Google,Stack Overflow和Android开发人员的指南,但是,我无法很好地解决这个问题。
我尝试过unbind drawables方法:
unbindDrawables(View view)
{
if (view.getBackground() != null)
{
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup)
{
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
{
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
我无法从android文档中有效地加载大型位图,因为我制作图像的大小是我想要的最大尺寸(740 x 1140 png),我不知道其他尺寸我可以插入电话:
mImageView.setImageBitmap(
decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));
此外,每个活动都有一个740x1140 png背景,其他较小的图像视图可用于敌人,按钮和东西。我一次在屏幕上看到的最多是8个。我通过XML分配所有这些图像。但是,我在开始一个新活动后完成了每个活动,但似乎没有释放内存。
下面是我的开始布局和logcat。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bro_quest_start_bg"
android:orientation="vertical"
android:scaleType="centerCrop"
tools:context="com.torch2424.broquest.StartScreen" >
<ImageView
android:id="@+id/broquesttitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/rrppgg_title"
android:contentDescription="@string/tank" />
<Button
android:id="@+id/start"
android:layout_width="120dp"
android:layout_height="55dp"
android:background="@drawable/buttons"
android:onClick="fight"
android:layout_gravity="center_horizontal"
android:text="@string/start" />
<Button
android:id="@+id/journal"
android:layout_width="120dp"
android:layout_height="55dp"
android:background="@drawable/buttons"
android:layout_gravity="center_horizontal"
android:onClick="journal"
android:text="@string/journal" />
<Button
android:id="@+id/character"
android:layout_width="120dp"
android:layout_height="55dp"
android:background="@drawable/buttons"
android:layout_gravity="center_horizontal"
android:onClick="character"
android:text="@string/character" />
<Button
android:id="@+id/shop"
android:layout_width="120dp"
android:layout_height="55dp"
android:background="@drawable/buttons"
android:layout_gravity="center_horizontal"
android:onClick="shop"
android:text="@string/shop" />
<Button
android:id="@+id/options"
android:layout_width="120dp"
android:layout_height="55dp"
android:background="@drawable/buttons"
android:layout_gravity="center_horizontal"
android:onClick="options"
android:text="@string/options" />
<Button
android:id="@+id/quit"
android:layout_width="120dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/buttons"
android:onClick="quit"
android:text="@string/quit" />
链接到Logcat,Log cat格式对堆栈溢出不会很好:( http://pastebin.com/dZSPaq4d
P.S图像在我的可绘制文件夹中都是可绘制的
答案 0 :(得分:1)
尝试使用像Picasso这样的图像缓存库。
答案 1 :(得分:1)
就像Voicu上面说的那样,我收到了OOM错误,因为我的drawables位于错误的文件夹中。昨晚我正在浏览互联网,并在谷歌搜索结果中发现了这个问题:Android setBackgroundResource cause out of memory excepiton
在哪里,他描述了他如何将他的图像从drawable文件夹移动到drawable-nodpi文件夹,并解决了他所有的OOM问题。所以我尝试了我的应用程序,它也运行良好。但是,图像确实看起来有点不同,所以要弄清楚为什么会这样,让我们引用一些Android文档:
“drawable /中的资源是默认的可绘制资源。系统假定默认资源是针对基线屏幕尺寸和密度设计的,这是正常的屏幕尺寸和中等密度。因此,系统会缩放默认密度适用于高密度屏幕和低密度屏幕的资源。“
所以,在我的情况下,我在“SD”图像和手机的文件夹中为“高清”手机放置“高清”图像,因为那也是可绘制的/默认的。所以反过来,它会扩展我所有的“高清”图像比实际需要的更大,这不仅使它们看起来更糟,而且还会使它们在堆上使用更多内存导致OOM(内存不足) )我的应用程序中的错误。
有关drawables文件夹和DPI的更多信息,请参阅Android文档的此链接:http://developer.android.com/guide/practices/screens_support.html
每个活动的OnDestroy()中的P.SUnbind Drawables确实对内存有帮助,所以如果你有任何内存问题,我建议你试试这个。通过这个调用,人们经常会调用System.gc(),这确实有帮助,但这是错误的编码实践。但在我的情况下,它特别是/ drawables的东西。另外,我偶然发现tinypng.com减少了PNG大小,它根本没有帮助解决OOM错误,但它确实减少了你的apk大小,所以我建议你为你的游戏和事情做这个,因为它减少了文件大小几乎没有明显的区别。