我正在開發一個多層次的遊戲,每個層次都是一個新的活動。在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