启动我的应用程序时,堆大约是15M。在setContentView
中调用MainActivity
后,它会提升到大约30M。这种布局没有多少。这就是为什么我想知道这是否正常。当开始另一个Acticity时,它再次上升到大约40M并且不会再次下降。
那是main.xml
的样子:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:background="@drawable/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/LinLAdMain"
android:layout_width="match_parent"
android:layout_height="88dp"
android:layout_weight="0.70"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.70"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:contentDescription="@string/logo_description"
android:src="@drawable/logo" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.14"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
style="@style/StartButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="onClick"
android:layout_margin="8dp" />
<Button
android:id="@+id/button2"
style="@style/HighscoreButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="onClick"
android:layout_margin="8dp" />
<Button
android:id="@+id/button3"
style="@style/SettingsButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="onClick"
android:layout_margin="8dp" />
</LinearLayout>
</LinearLayout>
正如您所看到的,我使用的是背景可绘制的。但文件大约是60K ..
这就是setContentView()
之后MAT-default-report的样子:
这就是GC的路径(不包括弱引用):
这些&#34; nexts&#34;在头类java.lang.ref.FinalizerReference结束,它告诉我什么。
正如我所说,每次活动都会变得更糟。例如之后 Main-&gt; Highscore-&gt; GlobalHighscore它不再可能启动Activity&#34; ingame&#34;。 希望你们能帮助我:)。
如果您需要更多信息/代码,请告诉我。
答案 0 :(得分:2)
像PNG和JPG这样的图像文件格式正在使用压缩算法来减少已用磁盘空间。但是,当在Android应用程序中加载图像时,这些文件会被解压缩,并且可能会比原始文件大得多。
解压缩后使用的空间类似于将PNG或JPG文件转换为BMP 32位颜色时使用的磁盘空间。
示例
一个非常简单的全白画,尺寸为1024 x 1024像素,保存为PNG将使用几Kb。
解压缩成ARGB_8888后,它变成1024 x 1024 x 4字节的数组(最后4个代表每个像素使用4个字节,每个基本颜色RGB一个,Alpha代表一个)
1024 x 1024 x 4 = 4,194,304 = 4 MB
因此这个简单图像使用的内存为4 MB。
怎么做
减少图像使用的内存:
找出导致内存分配增加的内存泄漏。
可能您正在使用一些阻止GC收集内存的活动Context
。最可能的原因是引用了Context / Activity的对象:
尝试在不再需要时或在活动OnDestroy()
问候。
答案 1 :(得分:0)
取android:src="@drawable/logo"
并手动调整大小以适合您的屏幕,需要。我是指drawable文件夹中的logo.png。在320x480分辨率下,它不需要2560x1600像素!