我的游戏用例看起来是这样的:我有一个 LoadingActivity,它加载(通过 AsyncTask,但这并不重要)并将游戏所需的所有图形存储在静态类中。加载完成后,将出现 MenuActivity。从这个活动中,我可以启动其他活动,例如 LikeBeginActivity。
这是清单的片段:
<activity
android:name="my.domain.mygame.LoadingActivity"
android:alwaysRetainTaskState="true"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="my.domain.mygame.MenuActivity"
android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activity
android:name="my.domain.mygame.LevelBeginActivity"
android:theme="@android:style/Theme.NoTitleBar" >
</activity>
调用看起来像这样:
加载活动
public void startMenu()
{
final Intent gameIntent = new Intent(this, MenuActivity.class);
startActivity(gameIntent);
}
菜单活动
buttonStartNewGame.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
Intent levelIntent = new Intent(MenuActivity.this, LevelBeginActivity.class);
levelIntent.putExtra(IntentConstants.STARTLEVELINDEX, 0);
startActivity(levelIntent);
}
});
烦人的问题是,当我在LevelbeginActivity中按HOME并通过启动器恢复游戏时,它总是从LoadingActivity开始,但为什么整个任务都被清除了?这对我来说没有意义。然后我想到添加
android:alwaysRetainTaskState="true"
清单中的 LoadingActivity ,但这也没有帮助。为什么它会再次开始整个任务?这是非常有问题的,因为如果一遍又一遍地启动 LoadingActivity,我就会耗尽内存。 (下一个问题将是后退按钮行为,但这是另一个问题)。我可以通过将最后一个 Activity 名称保存为 SharedPreferences 或其他内容来修补一些丑陋的加载行为,但我更喜欢一个干净的解决方案。