[英]Finish old instance of activity and start new instance of the same activity
我的MenuActivity帶有兩個按鈕“ New Game”和“ Resume”,分別帶有onClick方法newGame()和resume()
newGame()方法啟動GameActivity並完成MenuActivity。
resume()方法。 當resume()結束時,MenuActivity自身完成,並且實際上將自動恢復GameActivity。 因為它將在后堆棧中。 為什么它將放在后排堆棧中? 在GameActivity中,onBackPressed方法可啟動MenuActivity,但不會自行完成,因此保留在后退堆棧中。
public class MenuActivity extends Activity{ ... public void newGame(View view){ Intent intent = new Intent(this,GameActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); this.finish(); } public void resume(View view){ this.finish(); } }
public class GameActivity extends Activity{
...
@Override
public void onBackPressed() {
Intent inMain=new Intent(this, MenuActivity.class);
startActivityForResult(inMain, 0);
}}
該場景如下:按下新的游戲按鈕,即MenuActivity完成並且GameActivity啟動。 在游戲中的某個時刻,用戶按下后退按鈕,它將啟動MenuActivity。 在MenuActivity中,用戶再次按下新游戲按鈕。 它應該完全完成GameActivity的舊實例,並釋放其持有的所有內存,並從頭開始創建新實例。 但是,現在當啟動新游戲時,舊版本仍在內存中,我可以從DDMS分配的內存中看到它。 我將如何達到我所描述的理想效果?
如果你想開始一個新的GameActivity
從MenuActivity
,然后才有MenuActivity
返回一個特殊結果代碼GameActivity
。 在GameActivity.onActivityResult()
如果返回了特殊的結果代碼,則應像這樣啟動一個新的GameActivity
:
Intent intent = new Intent(this, GameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String result=data.getStringExtra("result");
//Check the result if it is resume just continue
// else
/* What about starting the activity from here itself */
Intent intent = getIntent();
finish();
startActivity(intent);
}
if (resultCode == RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.