【问题标题】:Android 2.2 (API 8) Logging OutAndroid 2.2 (API 8) 注销
【发布时间】:2013-09-12 22:01:44
【问题描述】:

我有一个可以打开多个活动的应用。

活动 A -> 活动 B -> 活动 C

我想注销并关闭所有打开的活动。我已经阅读了许多描述如何执行此操作的不同链接。

On logout, clear Activity history stack, preventing "back" button from opening logged-in-only Activites

Close all running activities in an android application?

然而,问题在于 Intent 标志仅适用于 API 级别 11 及更高级别。我有一个应用程序,我希望它可用于 API 级别 8 及更高级别。我知道它可以追溯到很久以前,但是对于 API 级别 8 完成此任务的最佳方法是什么?

还是我应该放弃并达到最低 11 级?

【问题讨论】:

  • 不要屈服!仍然有很多 Android 2.3 设备。
  • 使用 startActivityForResult()onActivityResult() 的替代方案即使在 API 级别 8 上也能正常工作
  • 活动关闭时是否向所有打开的活动广播?它会影响性能吗?

标签: android


【解决方案1】:

Intent 意图 = new Intent(this, LoginActivity.class); 意图.setFlags(意图.FLAG_ACTIVITY_CLEAR_TOP); 开始活动(意图);``

【讨论】:

    【解决方案2】:

    你试过了吗?

       void signOut() {
            Intent intent = new Intent(this, HomeActivity.class);
            intent.putExtra("finish", true);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities *not necessary*
            startActivity(intent);
            finish();
       }
    

    来自这个answer

    【讨论】:

    • 不幸的是,这对我不起作用。与以前完全相同的结果:/
    【解决方案3】:

    好的,您可以做一件事,获取应用程序的 ProcessID,然后在 onDestroy() 中终止该进程。就是这个链接How to force stop my android application programmatically?

    int pid=android.os.Process.myPid();
    android.os.Process.killProcess(pid);
    

    您可以使用此处一位用户告诉的替代方法,使用 startActivityForResult() 和 onActivityResult() 即使在 API 级别 8 上也可以正常工作。

    为此你需要使用

     startActivityForResult() instead of startActivty. and onActivtyResult() for you work.
    

    【讨论】:

      【解决方案4】:

      您说“我想注销并关闭所有打开的活动”。 , Intent.FLAG_ACTIVITY_CLEAR_TOP 适用于 API 级别 8 , 我已经在应用程序中加入了注销功能, 这种方式已经在商店中, 但如果我理解正确, 会有一个区别, 注销进入 LoginActivity , 注销不会杀死进程或类似的东西这违背了Android的概念。无论如何,当您按照上面的建议执行此操作时,您甚至可以执行此操作:

        void logout() {
              Intent intent = new Intent(this, LoginActivity.class);
              intent.putExtra("finish", true);
              intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
              startActivity(intent);
         }
      

      然后在 LoginActivity 中,您可以在 onCreate 方法中额外搜索“finish”布尔值并完成该活动。

      @Override public void onCreate(Bundle state) {
          super.onCreate(state);
          if (getIntent().getBooleanExtra("finish", false)) finish();
      }
      

      【讨论】:

        猜你喜欢
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多