我的应用程序有以下流程屏幕:

主屏->屏1->屏2->屏3->屏4->屏5

现在我在每个屏幕上都有一个公共注销按钮

(主屏/ 1屏/ 2屏/ 3屏/ 4屏/ 5屏)

我想当用户点击注销按钮(从任何屏幕),所有屏幕将完成,一个新的屏幕登录将打开。

我已经尝试了几乎所有的FLAG_ACTIVITY来实现这一点。 我还通过一些答案在stackoverflow,但不能解决这个问题。 我的应用程序是在Android 1.6上,所以不能使用FLAG_ACTIVITY_CLEAR_TASK

有什么办法解决这个问题吗?


当前回答

    Intent i1=new Intent(getApplicationContext(),StartUp_Page.class);
i1.setAction(Intent.ACTION_MAIN);
i1.addCategory(Intent.CATEGORY_HOME);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i1);
finish();

其他回答

我想我迟到了,但有一个简单而简短的答案。 Activity中有一个finishAffinity()方法,它将完成当前活动和所有父活动,但它只能在Android 4.1或更高版本中工作。

对于API 16+,使用

finishAffinity ();

16岁以下使用

ActivityCompat.finishAffinity (YourActivity.this);

希望能有所帮助!

我找到了这条路,它会清除所有历史并退出

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Intent intent = new Intent(getApplicationContext(), SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

finish();
System.exit(0);

Use:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这将清除所有的活动在顶部的家。

假设你完成了登录屏幕,当用户登录时,home被创建了,然后所有的屏幕从1到5在那个上面。我发布的代码将返回到主屏幕,完成所有其他活动。你可以在意图中添加额外的内容,并在主屏幕活动中读取并完成它(也许可以从那里再次启动登录屏幕或其他内容)。

我不确定,但你也可以尝试登录这个标志。我不知道在这种情况下活动将如何安排。所以不知道它是否会清除屏幕下面的那些,包括你现在所在的,但这绝对是可行的。

在Kotlin中是这样的:

在另一个活动中(包含一些类),在Imports下面

var activity:Activity?=null
    get() = field
    set(value) {
        field = value
    }

然后,在onCreate下面

activity=this

现在在MainActivity中:

activity?.finish()

如果你在之前的活动中使用startActivityForResult(),只需覆盖OnActivityResult()并调用finish();方法里面的所有活动..这就可以了……