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

时间:2017-09-25 10:52:41

标签: android android-activity

我有一个包含抽屉的主要活动,然后我有其他活动在它上面打开,他们也有抽屉菜单(他们继承主要活动)

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);

事实上,我想开始新的活动,并完成当前的活动或不同的活动。

4 个答案:

答案 0 :(得分: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

的更多信息

答案 1 :(得分:0)

我能做到这一点的唯一方法是自己处理旧的activity,所以我保留了一个正在打开的activity的引用,并在新的一个打开时关闭它。 / p>

我在oldActivity中创建了一个名为Main Activity的变量,并将其设置为每个其他活动onCreate方法:

 openedActivity = this;

然后每当从抽屉菜单打开另一个activity时我就完成了旧的:

  oldActivity.finish();

答案 2 :(得分:0)

不,你不能使用常见的活动标志或任何功能。我当然不知道

但是有一个解决方法,你可以从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();

答案 3 :(得分:0)

您需要将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