因此,我第一次使用 Monkey 测试来测试我的游戏。我设法在大约 3 分钟内没有发生崩溃,但最终因内存不足错误而崩溃,我正在尝试找出如何改进的方法。
我的程序结构如下:
- 有一个前屏幕将启动一项 Activity 。
- 次要 Activity 是大部分操作所在,也是我崩溃的地方。
- 我因 inflate 命令而崩溃
- 我的游戏强制采用纵向模式,制作 1 个布局比制作 2 个作品更容易...
- 有许多与我的次要 Activity 相关的类变量。我将在下面包括非静态的。我还为那些不太明显的事物提供了某种线索。
我想知道的是如何改进程序的内存管理,使其不会崩溃。我怀疑我需要手动删除其中一些变量,但我不确定这样做的正确位置是什么。谢谢!
private Level_Score_bar score_bar; // Custom view
private number_viewer num_viewer; // Custom view
private number_pad num_pad; // Custom View
private int time,score,level,num_remaining,current_var,change_loc,time_remaining;
private ArrayList<Integer> the_key;
private ImageView Number_to_select;
private Boolean update_viewer;
Random rseed;
Vibrator bzzz;
long ctime;
private Activity self=this;
private SharedPreferences prefs;
private Editor prefs_edit;
发生内存不足
setContentView(R.layout.level_layout);
这个布局相当复杂,包含多个 ImageView 、按钮、 TextView 等。
最佳答案
事实证明,我正处于堆的毛茸茸的边缘。我使用了相当多的图像,结果发现我超过了“正常”堆大小。我已经通过缩小一些图像来改善这种情况,但最好的解决方案是将我的 list 更改为以下内容:
<application
android:label="@string/app_name"
android:icon="@drawable/logo"
android:screenOrientation="portrait"
android:largeHeap="true">
大堆将允许我进行 future 的升级(其中将包括关卡设计等,这将占用相当多的空间......)总而言之,这应该是一个非常小的影响。
我选择了 @Booger 的答案,因为这是让我可以进行一些研究并发现我的堆空间不够大的部分,但我还包含了 @Ramam-Mystry 的代码段。
我还使用了此 excellent question 中的许多答案在我的追求中。我开始存储引用而不是位图以及其他一些相关位。总而言之,我的内存消耗下降了 25%,并且持续改善。
另一个技巧可能是在 Activity 中使用 onLowMemory()
函数,然后修剪不需要的内存。
关于java - Android 中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926092/