我的游戏应用程序存在某种内存问题。当我第一次运行它时,闪屏活动工作,关卡选择活动工作,然后游戏模式工作,我可以毫无问题地玩多个关卡。然后我退出了游戏。然后我第二次运行该应用程序时,我得到一个 OutOfMemoryError:位图大小超出 VM 预算,甚至在我看到启动屏幕之前。
我的应用程序基于一个名为 SD_globals 的应用程序,如下所示:
public class SD_Globals extends Application
{
int example_global_data = 99;
// stuff
}
和五个独立的活动,每个活动都可以访问 SD_Globals 中声明的各种全局数据。例如,其中一项活动是 SD_gameplay,如下所示:
public class SD_GamePlay extends Activity implements View.OnClickListener
{
SD_Globals gs; // gs stands for global state
gs = ((SD_Globals)getApplicationContext());
// now I can access global variable using code like this:
int x = gs.example_global_data;
}
欢迎任何有关此设置可能会发生何种错误的想法 - 尽管这不是我的具体问题。
我已经阅读了一些关于使用 DDMS 和内存分析器来帮助诊断问题的信息,但我不清楚的一件事是按下“转储 HPROF 文件”按钮以获得最有用的信息的最佳时间是什么时候。应该是在我的游戏仍在运行时还是在我退出游戏之后(但在第二次运行之前)还是在崩溃之后?
编辑:为了回应 Akhil 的回答,我将澄清我在每个单独活动的 onCreate 方法中只使用一次 getApplicationContext() 而在其他情况下没有。gs = ((SD_Globals)getApplicationContext())
我还应该说,这个通用应用程序结构(带