更改android中的活动会清除以前活动所需的内存吗?

时间:2013-06-23 08:37:23

标签: android memory clear

我正在开发一个多级游戏,每个级别都是一个新活动。

我想知道,如果我改变活动,如

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

用于1级和2级的内存被清除?

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

3 个答案:

答案 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();

祝福。