之前使用ActivityFlags NewTask + ClearTask显示之后,不会显示Android Activity

时间:2014-08-27 10:38:26

标签: android mvvmcross

我正在迎合两种特定情况

  1. 如果应用程序在设备运行时运行,请确保用户被强制登录 锁定,然后解锁
  2. 当用户注销后退堆栈并将其带到登录页面时
  3. 由于我需要自定义View的加载方式,我已经实现了自定义视图展示器(MvxAndroidViewPresenter),请参阅SplitViewPresenter presentation

    对于方案2,我在Request中传递一些PresentationValues,表示我想在显示LoginView时做一些不同的事情

    if (request.PresentationValues != null && request.PresentationValues.ContainsKey(MakeViewTopHint.HintName))
    {
        intent.AddFlags(ActivityFlags.NewTask);
        intent.AddFlags(ActivityFlags.ClearTask);
    }
    

    这会导致堆栈被解开并显示LoginView。大。

    对于场景1,我使用BroadcastReceiver来捕获Intent,ActionScreenOff。然后我尝试显示之前使用NewTask和ClearTask显示的相同Activity。

    如果我删除用于场景2的NewTask和ClearTask标志但是我需要它们来清除后面的堆栈,那么场景1工作正常。

    有谁知道为什么使用NewTask和ClearTask会阻止随后显示活动

1 个答案:

答案 0 :(得分:0)

问题是MVVMCross的MvxAndroidViewsContainer.AdjustIntentForPresentation。它在用于场景1的Intent上设置NewTask ActivityFlag。

公平地说,这可能是一个很好的理由,但是当NewTask用于在以前使用NewTask和ClearTask启动该Activity之后启动一个Activity时,它将无法解析并且不会显示Activity。

感谢MVVMCross'几乎无限的可配置性,我能够创建一个自定义的AndroidViewsContainer。在播放场景1时,我确保不使用NewTask标志,一切正常。

ActivityFlags.NewTask阻止Activity被解决的问题不是MVVM交叉或Xamarin的事情,因为我现在可以复制,我认为这是奇怪的行为,在vanilla Android中。

我现在有两个方案的工作解决方案

  1. 在设备锁定/解锁后强制用户登录
  2. 展开后退堆栈并在用户退出时将用户发送到登录