我有两个按钮“New Game”和“Resume”的MenuActivity,分别使用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分配的内存中看到它。我如何达到我所描述的理想效果?
答案 0 :(得分:0)
如果您想从GameActivity
开始新的MenuActivity
,请让MenuActivity
向GameActivity
返回特殊结果代码。在GameActivity.onActivityResult()
中,如果返回特殊结果代码,您应该像这样开始一个新的GameActivity
:
Intent intent = new Intent(this, GameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
答案 1 :(得分:0)
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
}
}
}