如何在关闭android中的所有其他活动时保持活动状态?

如何在关闭android中的所有其他活动时保持活动状态?

问题描述:

我有一个包含一个抽屉一个主要活动,然后我有一个在它上面打开,他们也有抽屉菜单(它们继承的主要活动)如何在关闭android中的所有其他活动时保持活动状态?

public class OBDActivity extends MainActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE); 
    View contentView = inflater.inflate(R.layout.activity_setting, null, false); 
    mDrawer.addView(contentView, 0); 
    getSupportActionBar().setTitle(R.string.OBDParams); 
} 
... 
} 

我想保持主要活动活着等活动并在新的活动正在打开时杀死所有其他活动?

我已经试过这个,但它只是杀死与正在打开的活动相同的旧活动。

Intent intent=new Intent(this, MessagesActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

事实上,我想开始新的活动,并完成当前的活动,无论是其相同的活动或不同的类型。

+0

你是否认为如果活动A(MainActivity) - > B - > C - > D - > E比B,C,D会被破坏?并在我点击后按钮将重定向到A? –

+0

你叫'finish()'吗? –

+0

@ ND1010_是的,正好。 –

唯一的办法我能做到这一点是处理由我自己收旧activity所以我一直在activity的参考,这是开当一个新的打开时关闭它。

我在Main Activity创建了一个名为oldActivity变量,我把它在每一个其他活动onCreate方法:

openedActivity = this; 

然后,每当另一activity打算从抽屉菜单中打开我刚刚完成旧:

oldActivity.finish(); 
+0

不是一个好的解决方案。保持对活动的引用可防止垃圾收集器清除它们。请看我的答案。 –

尝试这个

Intent intent = new Intent(ActivityC.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

更多关于intent

不,你不能这样使用的活动共同标志或任何function.Not当然我所知,做

但是有一个解决方法,您可以清除所有从backstack开始的活动,然后重新打开第一个活动。

试试这个:

Intent intents = new Intent(CurrentActivity.this, FirstActivity.class); 
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

您需要使用您的MainActivity为 “调度员”。当你想打开MessagesActivity,这样做:

Intent intent=new Intent(this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
// Add an extra that specifies the name of the class that should be started by MainActivity 
intent.putExtra("startActivity", MessagesActivity.class.getName()); 
startActivity(intent); 

这将清除活动堆栈一路背到现有的MainActivity实例。

现在,在MainActivity,覆盖onNewIntent()并采取调度所需Activity的护理:

@Override 
protected void onNewIntent(Intent intent) { 
    // Check if we should launch another Activity 
    if (intent.hasExtra("startActivity") { 
     // Start the desired Activity 
     String activityName = intent.getStringExtra("startActivity"); 
     Intent dispatchIntent = new Intent(this, Class.forName(activityName)); 
     startActivity(dispatchIntent); 
    } 
} 

这将启动所需的Activity上的MainActivity顶部。