2013-06-23 38 views
2

我正在开发一个多层次的游戏,每个层次都是一个新的活动。在android中更改活动会清除以前活动所需的内存?

我想知道,如果我更改用于1级和2一样

Intent myIntent = new Intent(getBaseContext(), Level3.class); 
       startActivity(myIntent); 

内存中的活动被清除?

如果不是,我如何清除以前级别的活动中的所有内容,以便手机仅为当前活动使用内存?

+0

你应该活动前完成了清晰的记忆。使用this.finish() – 2013-06-23 08:43:22

回答

0

您需要致电finish()以了解您不想再活动的活动(或活动)。在开始新活动后,您可以简单地称其为:

Intent myIntent = new Intent(getBaseContext(), Level3.class); 
startActivity(myIntent); 
finish(); 

否则,上一个活动将保留在活动堆栈上。

0

因为您使用的是活动/关卡设计,只需在onPause方法中添加一个检查,看看您的活动是否已完成,并且将当前关卡的所有引用都清空,这样GC就会知道您的关卡对象应该是发布,并会尽快发布。

@Override 
public void onPause(){ 
     super.onPause(); 
     if (isFinishing()){ 
     levelObject = null; 
} 

}

+0

或者你可以只使用'onDestroy'? – Peterdk

+0

onPause首先调用get,所以它会更快地释放内存。这才是重点。 –

0

我不会建议你为每个游戏等级的创建活动。将更好地创建一些控制器,将初始化您的游戏级别一个活动。而五言它必须有一些方法,从最后阶段清除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他是。

+0

每个级别是一个非常不同的游戏..所以很难有1000+线1活动..这就是为什么我喜欢使用更多.. – user1452079

+0

已更新的答案。 –