我正在开发一个多层次的游戏,每个层次都是一个新的活动。在android中更改活动会清除以前活动所需的内存?
我想知道,如果我更改用于1级和2一样
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
内存中的活动被清除?
如果不是,我如何清除以前级别的活动中的所有内容,以便手机仅为当前活动使用内存?
我正在开发一个多层次的游戏,每个层次都是一个新的活动。在android中更改活动会清除以前活动所需的内存?
我想知道,如果我更改用于1级和2一样
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
内存中的活动被清除?
如果不是,我如何清除以前级别的活动中的所有内容,以便手机仅为当前活动使用内存?
您需要致电finish()
以了解您不想再活动的活动(或活动)。在开始新活动后,您可以简单地称其为:
Intent myIntent = new Intent(getBaseContext(), Level3.class);
startActivity(myIntent);
finish();
否则,上一个活动将保留在活动堆栈上。
因为您使用的是活动/关卡设计,只需在onPause方法中添加一个检查,看看您的活动是否已完成,并且将当前关卡的所有引用都清空,这样GC就会知道您的关卡对象应该是发布,并会尽快发布。
@Override
public void onPause(){
super.onPause();
if (isFinishing()){
levelObject = null;
}
}
或者你可以只使用'onDestroy'? – Peterdk
onPause首先调用get,所以它会更快地释放内存。这才是重点。 –
我不会建议你为每个游戏等级的创建活动。将更好地创建一些控制器,将初始化您的游戏级别一个活动。而五言它必须有一些方法,从最后阶段清除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());
}
}
而是自定义的经理,你可以使用fragmets:
在两种方式 - 片段或你自己的经理,你会分开不同的阶段逻辑到不同的类。
你不需要创建另一个活动来分隔你的1000多行代码。只需使用阶段或Stratagy设计模式之一。
如果你仍然想使用活动只是做这样的事情:
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();
Best wis他是。
每个级别是一个非常不同的游戏..所以很难有1000+线1活动..这就是为什么我喜欢使用更多.. – user1452079
已更新的答案。 –
你应该活动前完成了清晰的记忆。使用this.finish() – 2013-06-23 08:43:22