重新启动活动而不是重新创建[Android]

时间:2016-07-15 12:00:59

标签: android

我有以下活动A,B,C的情况:  A-> B-> C->一种

在最后一步(C-> A)中,我想覆盖C的onBackPressed,以便它重新启动活动A(不重新创建它)。我尝试了下面的代码,但仍然调用了A的onCreate()。我应该添加哪个标志?

public void onBackPressed() {

    Intent intent=new Intent(C.this, A.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

}

5 个答案:

答案 0 :(得分:1)

这是刷新活动的最佳方式:

public void refresh() {
   Intent intent = getIntent();
   overridePendingTransition(0, 0); 
   intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
   finish(); 
   overridePendingTransition(0, 0); 
   startActivity(intent); 
   }

答案 1 :(得分:0)

OnCreate将称为,这是正确行为,以下来自Google documentation

  

在先前销毁活动后重新创建活动时,您可以从系统通过活动的Bundle中恢复已保存的状态。 onCreate()和onRestoreInstanceState()回调方法都接收包含实例状态信息的相同Bundle。

     

因为无论系统是创建活动的新实例还是重新创建前一个实例,都会调用onCreate()方法,因此在尝试读取之前必须检查状态Bundle是否为null。如果它为null,则系统正在创建活动的新实例,而不是恢复之前被销毁的实例。

但是如果你正确处理它并不重要,例如:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first

    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}

答案 2 :(得分:0)

public void onBackPressed() {

    Intent intent=new Intent(C.this, A.class);
    // remove below Flag and while going from A dont call finish();
    //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

}

答案 3 :(得分:0)

所以你想确保, A 活动处于与切换到活动 B 之前相同的状态,对吗?

您是否尝试过使用 onSaveInstanceState() / onRestoreInstanceState()(分别是 onCreate(Bundle savedInstanceState))回调,如下所述:{ {3}}? 示例:https://developer.android.com/training/basics/activity-lifecycle/recreating.html

我不确定你想要的方式是否可行。通常最好让Android处理生命周期本身。只要系统感觉破坏您的活动,只需保存重要的东西 - 这样您就可以再次使用上一个状态重新创建它......

修改 很久以前,我上次搞乱了多项活动。您是否考虑过使用片段而不是多项活动?一旦我得到了Fragments的概念,我开始只使用一个父Activity并替换Fragments。所以你所有的重物和#34;可以在父活动中实例化一次,并由需要它的片段访问。这可能是一个替代解决方案,这是恕我直言,值得考虑。

答案 4 :(得分:-1)

我喜欢Stanojkovic答案,要保存数据,可以使用意图传递它。

 public void refresh() {
   Intent intent = getIntent();
   intent.putExtra("extra_id",details);   
   overridePendingTransition(0, 0);
   intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
   finish(); 
   overridePendingTransition(0, 0); 
   startActivity(intent); 
   }

并将其放入onCreate

details=getIntent().getStringExtra("extra_id")