我正在开发一个多级游戏,每个级别都是一个新活动。
我想知道,如果我改变活动,如
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
用于1级和2级的内存被清除?
如果没有,我如何清除以前级别活动中的所有内容,以便手机仅使用当前活动的内存?
答案 0 :(得分:0)
您需要为不再想要激活的活动(或活动)调用finish()
。您可以在开始新活动后立即调用它:
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
finish();
否则,之前的活动将保留在活动堆栈上。
答案 1 :(得分:0)
因为您正在使用活动/级别设计,所以只需添加一个检查您的活动是否在onPause方法中完成,并将所有对当前级别的引用添加为null,这样GC就会知道您的级别对象应该被释放,它会尽快释放它。
@Override
public void onPause(){
super.onPause();
if (isFinishing()){
levelObject = null;
}
}
答案 2 :(得分:0)
我不建议您为每个游戏关卡创建活动。最好创建一些控制器来初始化一个活动中的游戏关卡。对于cource来说,它必须有一些方法来清除上一阶段的memmory,如下所示:
class StageManager
{
public Stage curStage;
public initStage(Stage stage)
{
//init stage here
curStage = stage;
stage.init();
}
public clearStage()
{
//do some clearing staff
curStage .clear();
}
}
abstract class Stage
{
public abstract init();
public abstract clear();
}
abstract class FirstStage extends Stage
{
//....
}
abstract class SecondStage extends Stage
{
//....
}
活动:
StageManager stageManager = new StageManager();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_view);
stageManager.init(new FirstStage());
}
@Override
public void onClick(View theView)
{
int id = theView.getId();
if (id == R.id.btnNextLevel) {
stageManager.clear();
stageManager.init(new SecondStage());
}
}
您可以使用碎片代替自定义管理器:
在两种方式中 - 片段或你自己的经理,你会将不同的阶段逻辑分成不同的类。
你不需要创建另一个Activity来分离你的1000多行代码。只需使用Stage或Stratagy desing patters中的一个。
如果您仍想使用活动,请执行以下操作:
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
finish();
并在onDestroy()中:
@Override
protected void onDestroy()
{
//here you must clear all data that were used in this Stage (Activity) like this :
clearMemmory();
super.onDestroy();
}
private void clearMemmory()
{
if(stageData!=null)
{
stageData.clear();
stageData =null;
}
}
或在打开另一个舞台之前直接清除memmory,例如:
clearMemmory();
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
finish();
祝福。