我的Android应用程序中有8个活动,我想要:

1)每次我在前7个活动中按返回按钮都会返回到上一个活动(Act1 <Act2 <Act3 <Act4 <Act5 <Act5 <Act6 <Act7)但

2)仅当我处于第8个活动中时,我才想绝对退出我的Android应用并转到手机的主屏幕。我尝试通过覆盖第8个活动中的onBackPressed method来做到这一点(电话主屏幕<-Act8)

我找到了一个在其中插入finish();的Android实现finish(); 在我所有8个Activity的所有意图中,但这不是我想要的,因为这样一来,我就无法随时返回上一个Activity(带有finish();当前的每个Activity从后台堆栈中删除)。

我该怎么办?

到目前为止,我第八项活动中的代码是:

            @Override
            public void onBackPressed()
            {

                   Intent intent = new Intent(Intent.ACTION_MAIN);
                   intent.addCategory(Intent.CATEGORY_HOME);
                   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                   startActivity(intent);
                   finish();

            }

#1楼 票数:0

向您的一个类中添加一个public static boolean以指示该应用程序正在退出。 当您希望应用程序完成时,在活动8中设置此布尔值,并让所有其他活动在其onResume()中对其进行检查,如果为true,则立即完成。 确保第一个活动在完成之前将其清除,否则仍可以在下次运行该应用程序时将其设置。 (当您的上一个活动完成时,Android不一定会丢弃VM,因此下一次可以重用该类及其静态成员。)

请注意,这是简单的方法,而不是“ Android方法”。 由于您可以使用Google,因此通常不赞成使用全局变量。 执行此操作的“正确”方法是启动结果的每个活动,然后将结果返回到onActivityResult(...) ,以指示应用程序是否正在退出。

#2楼 票数:0 已采纳

另一种方法:创建第9个Activity并将其命名为FinishAllActivity或类似的名称。 使此活动调用finish() ,然后返回其onCreate()

在活动8的onBackPressed()中,使用FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK启动FinishAllActivity FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK标志(有关更多详细信息,请参阅此问题 )。 活动1-8将从堆栈中删除,然后第9个活动将开始并立即终止,并且您的任务堆栈已清除。 当您重新打开应用程序时,它应该从活动1开始。

这样做的好处是您不必修改活动1-7。

#3楼 票数:0

您可以实现一个广播接收器,并让每个要关闭的活动在接收广播时都将调用finish()(这将从您的上一个活动发送)。 我想您需要在活动中将广播接收器类设为匿名内部类或私有类,以便您可以轻松地访问封闭的Activity的finish方法。

这是广播接收器的一个很好的例子: http : //www.tutorialspoint.com/android/android_broadcast_receivers.htm

查看自定义意图部分。

这样做是实现您要执行的操作的松散耦合方式。

#4楼 票数:0

使用您的意图使用FLAG_ACTIVITY_CLEAR_TOP标志,例如以下示例。

 Intent intent = new Intent(getApplicationContext(),FirstActivity.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  intent.putExtra("EXIT", true);
  startActivity(intent);

在您的第一次活动中检查以下情况。

if (getIntent().getBooleanExtra("EXIT", false)) {
Intent intent = new Intent(Intent.ACTION_MAIN);
               intent.addCategory(Intent.CATEGORY_HOME);
               startActivity(intent);
               finish();
}

FLAG_ACTIVITY_CLEAR_TOP的工作方式如下例

考虑一个由以下活动组成的任务:A,B,C,D。如果D调用了一个具有解析为活动B组件的Intent的startActivity(),则C和D将完成,并且B收到给定的Intent,结果现在的堆栈是:A,B。

所以在这里您必须称呼D是您的最后一个活动,而A是您的第一个活动。

#5楼 票数:-1

这样,您就完成了第8个活动,返回到第7个活动,同时,您就像在模拟设备上的“主页”按钮。 当您重新运行您的应用程序时,它将在屏幕上显示“第7个活动”。 如果您希望在这种情况下看到第八个活动,则只需删除finish()方法。 如果您希望下次您的应用从“第一活动”开始,那么您应该完成从8到第二活动的所有活动,而不是第一活动。 另外,您可以添加FLAG NEW_TASK或其他一些标志来启动您的第一个活动。
更新
我的建议(为了在不更改工作流程的情况下获得快速结果)是使用startActivityForResult()启动链中的所有活动。 当用户退出应用程序时,只需使用setActivityResult()返回一个特殊参数即可使所有嵌套活动了解用户的选择,从而使所有嵌套活动都运行finish() 这样,您的所有8个活动都将正确完成。

  ask by translate from so

未解决问题?本站智能推荐:

3回复

Android:将活动中包含3个片段的数据传递到上一个活动

我正在使用Android Studio构建一个Android应用程序。 假设我有Activity1和Activity2。 活动2有3个片段(3个标签)。 我设法通过使用片段适配器将数据从Activity1传递到Activity2,然后从Activity2传递给它的片段。 1)我想做相
1回复

退出后防止用户导航到活动

我有3个活动: LoginScreen。 主屏幕。 ProfileScreen。 登录屏幕是第一次调用的主要活动,单击登录按钮后,我使用以下代码调用主屏幕活动: 在主屏幕上,我有一个注销按钮,并且正在使用以下代码注销: 我不知道为什么,但是这段代
2回复

Android:如何在 backpress 上关闭一个活动,并在另一个按钮按下时关闭整个 backstack? [复制]

这个问题在这里已经有了答案: Android:清除后退堆栈(38 个回答) 1 年前关闭。 我有一个主要活动和
4回复

按下后退按钮时如何删除堆栈中的所有活动

我有一个活动列表A - B -C -D - E等等,例如最终活动是K.当我按下BACK按钮时,我希望在堆栈中清除所有这些活动。 我能怎么做 ? 事实上,我骑过去了 但只删除当前活动并退出应用程序。 然后,我回来申请,它恢复K之前的活动。我希望它从重新打开应用程序时开始。 我认为这
4回复

按下按钮后如何返回特定的先前活动

我有下一个问题。 假设我有三个活动: A, B and C 我可以从A to C ,也可以从B to C 然后,当我在Activity C按按钮时,我想返回到上一个活动,或者A或B。我不知道哪个是先前的。 在活动中: 在B活动中: 在活动C中: 请帮我。 怎
2回复

Android后退按钮行为问题…

我一直在使用finish()进行后退按钮操作,以返回到上一个活动及其正常工作,但在此特定情况下无法正常工作。 以下是我的活动及其功能的列表: 活动A-显示在线论坛主题 活动B-显示论坛主题的评论 活动C-发表新评论 用户发布新评论后,他将被定向到活动B。 问题
4回复

我需要在mainactivity中使用退出按钮退出我的android应用程序

我创建了两个活动,即MainActivity和Registration。 MainActivity用于登录,用户在此输入其名称和密码。 MainActivity具有三个按钮 登录按钮 注册按钮 退出按钮。 当我按下登录按钮时,用户将使用他输入的用户名和密码登
6回复

Android退出应用程序

不建议直接退出应用程序,所以重点是完成所有活动,以便一切都进入后台,用户返回主屏幕。 我的问题是我有主要的活动,总是用标志Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP并启动另一个活动,我想放置退出按钮。 为