2013-06-23 70 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

已更新的答案。 –