如何在背压事件中清除活动堆栈跟踪?

Gar*_*ari 5 android activity-lifecycle android-activity

我创建了一个具有多个页面的应用程序,从一个到另一个的导航代表了一个关键的流程.我不希望用户能够在没有先警告他的情况下按下后退按钮并转义活动,然后最终删除所有堆栈跟踪,以便当活动再次启动时它重新开始.

到目前为止,我一直在使用类似于以下功能的东西:

    @Override
    public void onBackPressed() 
    {
        this.finish(); 
        Intent int1= new Intent(this, Home.class);
        int1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(int1);
        super.onBackPressed();
    }
Run Code Online (Sandbox Code Playgroud)

但有时当我再次启动应用程序退出应用程序后,它会从某个随机页面或我退出应用程序的那个页面重新启动(基本上不是从预期开始的主屏幕)

除了清除代码中描述的所有先前活动标志之外,我想不出更简洁的退出应用程序的方法.任何有关上述的帮助表示赞赏!

编辑:

如果用户按下后退按钮,在我的活动流程中的任何时候,我都希望将控件返回到主页面(清除所有先前的活动堆栈跟踪).这样,如果有人重新登录应用程序,它将从主页面重新开始.

Dav*_*ser 10

您不需要任何此自定义代码onBackPressed().您需要做的就是将其添加到<activity>清单中的所有定义(根活动除外):

android:noHistory="true"
Run Code Online (Sandbox Code Playgroud)

这可确保您的所有活动(期望根活动)都不会记录在后台堆栈中.当用户单击BACK键时,它将返回到根活动.

这样做的另一个好处是,如果用户离开您的应用程序(通过单击HOME或通过拉下通知栏并单击通知,当他返回到您的应用程序时,它也将返回到您的根活动.