【问题标题】:Android: Clear Activity HistoryAndroid:清除活动历史记录
【发布时间】:2013-05-04 22:09:55
【问题描述】:

我遇到了一个问题 - 清除活动历史记录。我的问题出现的地方有以下后果:

A(SplashScreen)->B(GuestScreen)->C(Screen for signed users)->Press Home Button->A->B->Press Back Button->C->Press Back BUtton->B->Press Back Button->exit from the app.

我尝试了不同的方法来解决它,并在将几乎所有活动设置为 singleInstance 和 setting all intent flags to CLEAR_TOP and NEW_TASK 的过程中发现只有一个非常奇怪的解决方案,但是所有活动都呈现出一些奇怪的情况(不是正常的,我的意思是,首先,出现空的黑屏使用 actionBar,大约 1 秒后出现我的真实布局),正如我已经说过的,有点延迟。我不喜欢这个解决方案,尽管一切都正确关闭并产生了正确的后果。现在,我正试图让它正常工作,而不会出现这种延迟和奇怪的黑屏。我也尝试使用像CLEAR_TASK, CLEAR_TOP 这样的意图标志。尝试在必要时将clearTaskOnLaunh for root activity and finishOnLaunch in manifest file 用于其他人,但无济于事。如何解决?

编辑:

尝试再次将 clearTaskOnLaunch 设置为 A。我在第一次启动应用程序时看到下一个日志(A 已经调用了 B 没有任何标志):

  Main stack:
    TaskRecord{42610648 #869 A }
    Intent { flg=0x10000000 cmp=/.activities.SplashActivity }
      Hist #4: ActivityRecord{413cf8f8 /.activities.GuestActivity}
        Intent { cmp=/.activities.GuestActivity }
        ProcessRecord{414fdf60 15651:/10103}

// Guest Activity(B) 调用 UserActivity(C):

    Intent { flg=0x10000000 cmp=/.activities.SplashActivity }
  Hist #3: ActivityRecord{415c86f0 /.activities.UserActivity}
    Intent { cmp=/.activities.UserActivity }
    ProcessRecord{414fdf60 15651:/10103}

//按Home键再次启动应用(A调用了B):

    TaskRecord{42610648 #869 A cashongo.app.peachy}
Intent { flg=0x10000000 cmp=c/.activities.SplashActivity }
  Hist #5: ActivityRecord{42127398/.activities.GuestActivity}
    Intent { cmp=/.activities.GuestActivity }
    ProcessRecord{414fdf60 15651:/10103}
  Hist #4: ActivityRecord{415c86f0 /.activities.UserActivity}
    Intent { cmp=/.activities.UserActivity }
    ProcessRecord{414fdf60 15651:/10103}

又是同样的问题,历史上的最后一个活动。如果我按下返回按钮,我会得到 UserActivity。

【问题讨论】:

  • 不清楚。当您按下主页按钮时,当前活动暂停并导航到主屏幕developer.android.com/guide/components/…
  • 我只需要在应用再次启动时清除所有历史记录或任务,堆栈中不会有任何以前保存的活动。
  • 当您有 clearTaskOnLaunh 用于根活动时,您在哪里启动您的应用程序?是根活动吗?
  • 是的。我试图将它设置为 A 但根本没有结果,就好像它根本不起作用(我很困惑,为什么?)。
  • 你在哪里启动应用程序从家里或长按主页键?

标签: android stack history


【解决方案1】:

似乎我已经设法修复它,但它仍然有点奇怪。我已将 launchMode=singleInstance 设置为 A 和 B 活动。并调用任何没有任何标志的活动。活动调用之间没有 1 秒延迟的黑屏。有点奇怪的解决方案,因为谷歌不建议在一般情况下使用 singleInstance 或 singleTask,我认为它是一般的。如果有人能找到更好的解决方案,欢迎您。

更新: 通过 IDE 构建和启动 apk 时,另一件非常重要的事情。某种 IDE 启动应用程序错误,请参阅 this post。因此可以更改堆栈行为。

【讨论】:

    【解决方案2】:

    我们修复它的方法是在第一个活动中采用静态布尔变量。假设您的第一个活动是 A,在 A 中声明变量如下

    public static boolean closeAllActivities=false;
    

    然后在其余所有活动中将以下代码放入 onResume()

    protected void onResume() {
    super.onResume();
    if(A.closeAllActivities)
    {       
        finish();   
    }
    else
    {
        // TODO your requirement inside onResume
    }
          }
    

    无论你想在哪里退出应用程序设置为

    A.closeAllActivities=true;//It exits all the activities one after other.
    

    【讨论】:

      【解决方案3】:

      我 100% 没听懂你的问题

      我认为您在活动堆栈和 CLEAR_TOP 方面遇到问题

      所以使用 startActivityForResult 而不是 startActivity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-02
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多