startActivity会导致onCreate()

问题描述:

我有应用程序,当我使用IntentstartActivity()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(),但显然它重新创建了整个东西

+1

你可以包括一些代码,请帮助我们尝试和协助你吗? –

+0

虽然如果你打电话给startActivity,你并不是真正的导航*返回* – CodingIntrigue

+0

是的,我的问题是,什么是正确的方法? – Heisenberg

如果你想要当你按回来,你想要显示前一个屏幕,那么你不必在你的代码。 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

+0

我的意思是,我有活动1,我去了活动2 - >活动3 - >活动2 - >活动3,然后我想去活动1,而不是一直回到活动树中。 – Heisenberg

+0

编辑答案。您需要覆盖onRestart() –

+0

它会如何防止重新初始化活动? – Heisenberg