android:clearTaskOnLaunch不起作用如何在前台时清除backstack?

时间:2013-06-14 11:03:39

标签: android onresume onpause application-restart

我在我的应用中需要这种行为,“用户每次尝试启动时都必须登录(直接触摸应用程序图标,或者通过任务管理器或通过最近的应用程序触摸)” 所以活动按此顺序排列(认为App名称是Foo app)

  1. S - 启动画面
  2. L - 载入画面
  3. Lo - 登录屏幕
  4. M - 主菜单(包含任务列表)
  5. T - 任务屏幕
  6. “用户启动应用程序并按以下顺序继续:    S - > L - > Lo (登录) - > M (选择其中一项任务) - > 任务屏幕

    • 所以当他在任务屏幕时,他按下主页按钮,应用程序转到后台,他使用另一个应用程序。并再次午餐Foo应用程序。所以,如果他按下后退按钮,它会显示以前使用的任务屏幕 ???如果再次按下后退按钮,它会再次进入主屏幕,依此类推...... ???

    • 这不应该发生,只是我想要的是,当应用程序到达前台时,用户需要登录并且永远无法返回任何屏幕。

    注意:所有屏幕都扩展了一个扩展了Activity类的BaseActivity类。在那里我使用onResume(),onPause()方法和另一个自定义方法来找出扩展子类何时进入暂停状态,并在应用程序来自后台时恢复!在某些屏幕中我也不得不使用碎片......!

    提前感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:0)

将标记android:clearTaskOnLaunch="true"添加到清单中的根(主)活动标记。然后用户将始终返回此活动。

要从任何其他活动跳转到登录,请使用:

public static void logoff(Context c){
    Intent logoff = new Intent(c,LoginActivity.class);
    logoff.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    c.startActivity(logoff);
}

答案 1 :(得分:0)

我不会争论为什么你的问题会描述一个不那么令人愉快的用户体验,但你会对下面的解决方案有什么看法?

Lo,M T 替换为片段。因此,在 L 之后,您将有一个活动( PostL ),您可以在其中显示第一个 Lo 片段,然后在用户操作上添加在Lo之上<{1>}之后的一个M 片段,然后继续前进,你会将M替换为T:get(Supported)FragmentManager.beginTransation().add(id, fragment).commit()。 - 或者您可以在M之上添加T,这是您的选择,因为它可能更适合。

在这个PostL活动中,在get(Supported)FragmentManager.beginTransation().replace(id, fragment).commit()方法中,如果片段backstack由多个片段组成,则只调用onPause() - 底部片段为Lo 。 / p>

当用户点击主屏幕并重新进入应用程序(无论从哪里)或任何其他应用程序进入前台时,将以这种方式涵盖这两种情况。另外,如果你正确地考虑了后台堆栈大小,如果用户点击回来,那么他将始终打开最后一个片段(可能是M或Lo)。

我希望它有意义......