Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XamarinForms Shell OnResume-显示上一页_Xamarin_Xamarin.forms - Fatal编程技术网

XamarinForms Shell OnResume-显示上一页

XamarinForms Shell OnResume-显示上一页,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我想在XF 4.5.0 Shell应用程序中实现锁定机制 我有一个静态计时器,它可以计算经过的秒数,并根据一些逻辑显示用户在将应用程序放在后面之前的屏幕(用户转到instagram,但应用程序在后台运行) 因此,我的OnResume()方法如下所示: private bool IsUserExists() { if (!string.IsNullOrWhiteSpace(GlobalAppSettings.Email) && !string

我想在XF 4.5.0 Shell应用程序中实现锁定机制

我有一个静态计时器,它可以计算经过的秒数,并根据一些逻辑显示用户在将应用程序放在后面之前的屏幕(用户转到instagram,但应用程序在后台运行)

因此,我的
OnResume()
方法如下所示:

private bool IsUserExists()
        {
            if (!string.IsNullOrWhiteSpace(GlobalAppSettings.Email) && !string.IsNullOrWhiteSpace(GlobalAppSettings.Password) && !string.IsNullOrWhiteSpace(GlobalAppSettings.Pin))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        protected override void OnResume()
        {
            if ((!OnSleepOrPauseTime.HasValue || OnSleepOrPauseTime.Value.AddSeconds(5) <= DateTime.Now)
                &&(IsUserExists()))
            {
                Xamarin.Forms.Device.BeginInvokeOnMainThread(async () =>
                {
                    await Shell.Current.GoToAsync(Routes.LoginPinPage, false);
                });
            }
        }
private bool IsUserExists()
{
如果(!string.IsNullOrWhiteSpace(GlobalAppSettings.Email)和&!string.IsNullOrWhiteSpace(GlobalAppSettings.Password)和&!string.IsNullOrWhiteSpace(GlobalAppSettings.Pin))
{
返回true;
}
其他的
{
返回false;
}
}
受保护的覆盖void OnResume()
{
如果(!OnSleepOrPauseTime.HasValue | | OnSleepOrPauseTime.Value.AddSeconds(5)
{
wait Shell.Current.GoToAsync(Routes.LoginPinPage,false);
});
}
}
问题:用户在屏幕上看到他之前所在的位置大约半秒钟,然后它重定向到LoginInput

快乐的路径应该是,用户不会看到退出应用程序之前闪烁的页面,而是立即锁定屏幕


可能的解决方案:在离开应用程序以某种方式将后台应用程序重定向到登录pin屏幕之前,我突然想到了这一点。

PushAsync有两个重载-

默认情况下,
PushAsync
方法使用
动画推送新页面。我认为这就是您所指的所谓“闪烁”。 您可以尝试使用第二个重载并将false传递给
animated
属性,看看它是否有任何区别

PushAsync(新登录输入页(),false);
如果你想在应用程序离开时重定向用户-你可以使用另一个
应用程序的生命周期方法-
在睡眠中调用你的导航。但是我建议先在没有动画的情况下尝试


请记住,如果您选择使用
OnSleep
方法,您还必须在不使用动画的情况下推送页面。我刚刚测试了使用动画推送,我确实看到了您提到的闪烁。将
动画
标志设置为false,可以为我删除任何闪烁。

PushAsync有2个重载-

默认情况下,
PushAsync
方法使用动画推送新页面。我认为这就是您所指的所谓“闪烁”。 您可以尝试使用第二个重载并将false传递给
animated
属性,看看它是否有任何区别

PushAsync(新登录输入页(),false);
如果你想在应用程序离开时重定向用户-你可以使用另一个
应用程序的生命周期方法-
在睡眠中调用你的导航。但是我建议先在没有动画的情况下尝试


请记住,如果您选择使用
OnSleep
方法,您还必须在不使用动画的情况下推送页面。我刚刚测试了使用动画推送,我确实看到了您提到的闪烁。将
动画
标志设置为false,可以为我删除任何闪烁。

行为或者动画变为false也是一样。在荣誉移动android 9上测试,你在OnSleep方法中有什么逻辑吗?另外,这是OnResume方法中唯一的代码吗?是否可能IsUserExists花费了一点时间并且阻止了检查?请看我的更新。我还使用了私有方法
IsuesResists()
。我没有覆盖OnSleep()方法,yetI在OnResume()中对所有内容都进行了注释方法除了重定向到一个PinPage之外,还是一样的,我可以看到上一页。我看到你改变了推新页的方式-你使用的不是Navigation的PushAsync方法,而是Shell的GoToAsync方法。我没有用这种方式测试它。如果它再次闪烁,那么我建议你试试OnSleep方法。不幸的是,我没有我不知道推的逻辑是什么(OnSleepOrPauseTime道具),但您可以尝试将其放在那里。如果它在应用程序放在后台后计算秒数,您可以启动计时器并使用它来计算秒数。该行为与动画变为false时的行为相同。在荣誉移动android 9上测试,您在OnSleep方法中是否有任何逻辑?此外,这是OnResume方法中唯一的代码吗?是吗可能IsUserExists花费了一些时间,并且阻止了检查?请查看我的更新。我还使用了私有方法
IsuesResists()
。我没有覆盖方法OnSleep(),yetI在OnResume()中对所有内容进行了注释方法除了重定向到一个PinPage之外,还是一样的,我可以看到上一页。我看到你改变了推新页的方式-你使用的不是Navigation的PushAsync方法,而是Shell的GoToAsync方法。我没有用这种方式测试它。如果它再次闪烁,那么我建议你试试OnSleep方法。不幸的是,我没有我不知道推的逻辑是什么(OnSleepOrPauseTime道具),但您可以尝试将其放在那里。如果它在应用程序放在后台后计算秒数,您可以启动计时器并使用它计算秒数。如果您想在后台实现计时功能,在Android中,当您的应用程序是后台时,您应该使用forground service和
AlarmManager
来实现,您应该使用dependency serivce打开forground服务(使应用程序在后台保持活动状态),使用
AlarmManager
计时,计时结束后,使用MessageCenter从Droid向PCL发送消息,然后导航登录ping屏幕。@LeonLu MSFT基本上奇怪的是,有些人没有一些nuget或Resume()锁屏示例?