簡體   English   中英

完成活動的舊實例並啟動同一活動的新實例

[英]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分配的內存中看到它。 我將如何達到我所描述的理想效果?

如果你想開始一個新的GameActivityMenuActivity ,然后才有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM