0

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

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}

// 访客 Activity(B) 调用 UserActivity(C):

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

//按下主页按钮并再次启动应用程序(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。

4

3 回答 3

0

我100%没看懂你的问题

我认为您面临活动堆栈和 CLEAR_TOP 的问题

所以使用startActivityForResult而不是startActivity

于 2013-05-10T09:09:17.560 回答
0

我们修复它的方法是在第一个活动中采用静态布尔变量。假设您的第一个活动是 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.
于 2013-05-10T09:18:35.897 回答
0

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

更新: 通过 IDE 构建和启动 apk 时还有一件非常重要的事情。某种 IDE 启动应用程序错误地看到了这篇文章。因此可以更改堆栈行为。

于 2013-05-10T13:07:41.077 回答