startActivity导致onCreate()

时间:2013-12-16 13:20:05

标签: android android-lifecycle

我有应用程序,当我使用IntentstartActivity()导航回来时,views为空,调用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,因此我有ActionBar初始化的活动,每个活动都只是扩展它。本活动描述了我导航回活动的方式。

@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 :(得分:0)

如果您在按下时需要,则需要显示上一个屏幕,然后您不必在代码中执行此操作。 Android Runtime在内部维护堆栈,并在您按下时显示 last-shown-activity 。无需通过onBackPressed()

处理

但是,如果您需要此默认操作以外的其他操作,那么 就应该使用onBackPressed()。否则,让Android处理它。

因此,在您的应用中,如果Activity 1调用Activity 2,并且用户按下,则默认操作将是再次显示Activity 1。不要覆盖onBackPressed()方法

修改 对于自定义的活动流程,您必须自己构建逻辑。您需要覆盖onRestart()中的Activity 1onStop()中的Activity 3。这样,onCreate将不再被调用。根据你的逻辑,我的意思是,标记来跟踪你所处的活动,检查那些标志,并从那里调用所需的活动。

编辑2: 这个以前的SO问题,回答你的需求:

Android Activity management,建议在意图上设置标记FLAG_ACTIVITY_REORDER_TO_FRONT,然后调用startActivity()

使用其他堆栈重新排序选项的Intent标记检查Android活动堆栈管理:Stack management