Android:清除活动历史记录

时间:2013-05-10 09:02:18

标签: android stack history

我遇到过一个问题 - 清除活动历史。如果出现问题,我会得到以下结果:

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。

3 个答案:

答案 0 :(得分:0)

我不明白你的问题100%

我认为你面临着活动堆栈和CLEAR_TOP

的问题

所以使用 startActivityForResult 而不是 startActivity

答案 1 :(得分: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.

答案 2 :(得分:0)

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

<强>更新 通过IDE构建和启动apk时,还有一件非常重要的事情。某种IDE启动应用程序错误地看到this post。由于它可以改变堆栈行为。