startActivity会导致onCreate()
我有应用程序,当我使用Intent
和startActivity()
,views
为空导航时,onCreate()
被调用并且活动被重新初始化。为什么是这样以及如何绕过它?startActivity会导致onCreate()
我导航回活动这样的:
@Override
public void onBackPressed() {
if (this.getClass() == XXX.class) {
Intent i = new Intent(this, YYY.class);
startActivity(i); //<-- activity restarts
return;
}
}
super.onBackPressed();
}
我用ActionbarSherlock,所以我有动作条的初始化和每一个活动只是其扩展活动。这个活动描述了我回到活动的方式。
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
initUIComponents();
setListeners();
resetProgress();
}
和initUI()初始化UI。
编辑
我的意思,我怎么能回去,而不是重新创建它以前创建activity
(即通过onBackPressed
称为不是一个)?我使用startActivity
(),但显然它重新创建了整个东西
如果你想要当你按回来,你想要显示前一个屏幕,那么你不必在你的代码。 Android Runtime在内部维护堆栈,并在您按回时显示上次显示的活动。无需通过onBackPressed()
处理它。然而,如果你想比这个默认操作以外的东西,那是时,你应该使用onBackPressed()
。否则,让Android处理它。
因此,在您的应用程序中,如果Activity 1
调用Activity 2
,并且用户按下,则默认操作将是再次显示Activity 1
。不要覆盖onBackPressed()
方法
编辑: 为活动定制的流程,你就必须建立自己的逻辑。您需要覆盖Activity 1
中的onRestart()
和Activity 3
中的onStop()
。这样,onCreate
将不会再被调用。按照您的逻辑,我的意思是,标志可以跟踪您所在的活动,检查这些标志并从那里调用所需的活动。
编辑2: 此之前的SO问题,回答了你所需要的:
Android Activity management,这表明设置上的意图的标志FLAG_ACTIVITY_REORDER_TO_FRONT,然后调用startActivity()
退房Android的活动堆栈管理使用意图标志为其他堆栈重新排序选项:Stack management
我的意思是,我有活动1,我去了活动2 - >活动3 - >活动2 - >活动3,然后我想去活动1,而不是一直回到活动树中。 – Heisenberg
编辑答案。您需要覆盖onRestart() –
它会如何防止重新初始化活动? – Heisenberg
你可以包括一些代码,请帮助我们尝试和协助你吗? –
虽然如果你打电话给startActivity,你并不是真正的导航*返回* – CodingIntrigue
是的,我的问题是,什么是正确的方法? – Heisenberg