在android中更改活动会清除先前活动所需的内存? [英] Changing activity in android clears the memory needed for the previous activities?

查看:76
本文介绍了在android中更改活动会清除先前活动所需的内存?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个多关卡游戏,每个关卡都是一个新活动.

I am developing a multi level game, where each level is a new activity.

我想知道,如果我更改活动类似

I want to know, if i change the activity like

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

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

The memory used for Level 1 and 2 is cleared?

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

If not, how can I clear everything from previous level activities so the phone uses just the memory just for the current activity ?

推荐答案

我不建议您为每个游戏级别创建活动".最好创建一些控制器来初始化 one 活动中的游戏级别.当然,它必须具有一些方法来清除上一阶段的内存,例如:

I would not recommend you to create Activity for each of your game level. Would be better to create some Controller that will initializate you game levels in one Activity. And of cource it must have some methods to clear memmory from last stage, something like this :

    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代替您的自定义管理器:

Instead of your custom manager, you can use fragmets :

  • http://developer.android.com/training/basics/fragments/creating.html
  • http://developer.android.com/training/basics/fragments/fragment-ui.html

通过两种方式-片段或您自己的管理器,您将把不同阶段的逻辑分离到不同的类中.

In both ways - fragments or yout own manager you will seperate different stages logic to different classes.

您无需创建另一个Activity即可分隔您的1000多行代码.只需使用Stage或Stratagy设计模式之一即可.

Youd don't need to create another Activity to seperate yours 1000+ lines code. Just use one of Stage or Stratagy desing patters.

如果您仍然想使用活动",请执行以下操作:

And if you still want to use Activities just do something like this :

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

和onDestroy()中:

and in 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;
    }
}

或直接在打开另一个Stage之前清除内存,例如:

or clear memmory directly before opening another Stage, something like :

clearMemmory();

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

finish();

最良好的祝愿.

这篇关于在android中更改活动会清除先前活动所需的内存?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆