【问题标题】:Android kill all other activities on starting a new oneAndroid会在开始一个新活动时杀死所有其他活动
【发布时间】:2013-12-23 15:09:30
【问题描述】:

我有一个 android 活动问题。

这是我的流程的工作原理:

  1. Login Activity 开始
  2. 登录成功。 MainMenuActivity 启动,LoginActivity 由我完成。
  3. 用户触摸了设置并且 SettingsActivity 启动。 MainMenuActivity 未完成。因为它是主菜单。当用户在设置屏幕上按下返回时,我需要返回 MainMenuActivity。所以我不能杀MainMenu
  4. 用户在注销时触及,SettingsActivity 由我完成,登录活动开始。当用户返回登录名时,我需要杀死 MainMenuActivity 但我不能。:/
  5. 我试过FLAG_ACTIVITY_SINGLE_TOPCLEAR_TOPSINGLE_TASKNEW_TASKNO_HISTORY 等。几乎所有这些都不起作用
  6. 我把launchMode="singleTask"clearTaskOnLaunh="true" 等放回去了。
  7. addFlags()setFlags() 都试过了,没用
  8. 这里有很多关于这个主题的问题,我阅读并应用了所有建议的解决方案,但没有奏效。

有人可以帮忙吗?

P.S android:minSdkVersion="8"android:targetSdkVersion="15" 用于我的应用程序。我没有在应用程序中使用片段,我使用旧的活动结构。

【问题讨论】:

  • 请使用 NO_HISTORY 并通过覆盖 onBackpress 肉食手动执行回压。我认为这将解决您的问题

标签: android android-intent android-activity flags kill-process


【解决方案1】:

我建议为结果启动设置活动(请参阅here),当用户请求注销时,相应地设置结果。您将在 MainActivity 的 onActivityResult 中获得此结果(请参阅here)并可以在那里处理注销,在启动 loginActivity 之前完成 mainActivity。

【讨论】:

  • 您的解决方案似乎很合理,这将绝对有效。只有更多的行然后设置一个标志,谢谢。可能我用这个。我很欣赏
  • 这很好用。非常感谢。但我希望有一天我能学会如何使用标志。
【解决方案2】:

像这样使用 FLAG_ACTIVITY_CLEAR_TOP-

Intent loginIntent = new Intent(this, Login.class);
        loginIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(loginIntent);
    finish();

【讨论】:

  • 这个我已经试过了,但是在你写完之后我又试了一次,但是还是不行。谢谢。
  • Intent i = new Intent(SettingsActivity.this, StartupActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);开始活动(一);完成();
  • 这不起作用,因为Login 活动不在任务堆栈中。他已经完成了。如果Login 活动仍位于任务堆栈的根目录,这将起作用。
【解决方案3】:

像这样使用两个标志的组合:

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

这会删除所有其他活动并启动此活动。

试试这个。

对于 api 级别

i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
              Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

【讨论】:

  • 实际上似乎没有标志为 Intent.FLAG_ACTIVITY_CLEAR_TASK 也许你的意思是:Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET?
  • 这可从 API 级别 11 获得
  • OP 在他的帖子中说minSdkVersion="8"。他不能使用Intent.FLAG_ACTIVITY_CLEAR_TASK。您需要在回答之前阅读问题。
  • 我的错误。但是我发布的链接为这个标志提供了另一种选择
【解决方案4】:

我建议您在启动主菜单时不要完成Login 活动。然后,您始终可以通过执行以下操作清除注销时的所有活动:

    Intent intent = new Intent(this, Login.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

这仅在Login 活动在任务堆栈的根(开始)处仍处于活动状态时才有效。

为了防止用户从Main 活动返回到Login 活动,您可以在Main 活动中覆盖onBackPressed() 并执行其他操作。

【讨论】:

    【解决方案5】:
    Intent intent = new Intent(MainActivity.this, MyActivity2.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(intent);
                        finish();
    
    1. 在本例中,Mainactivity 自动关闭,Myactivity2 启动。 还有一件事你需要添加finish();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多