Xamarin Forms iOS 在唤醒时冻结

Posted

技术标签:

【中文标题】Xamarin Forms iOS 在唤醒时冻结【英文标题】:Xamarin Forms iOS freeze on wake 【发布时间】:2018-09-13 07:54:11 【问题描述】:

我的应用程序(有时)在从暂停中唤醒时冻结(仅限 ios)。无论是锁定一段时间后唤醒手机,还是在另一个应用程序中运行任务后返回应用程序。

使用Xamarin.Forms 2.5.0.X

无法调试,因为Visual Studio 在您锁定屏幕或将应用移至后台(主页按钮)时与设备断开连接。

其他人有这种行为的经验吗?

我已经在我的共享项目的App.xaml.csOnSleepOnResume 方法中设置了一些东西,希望能解决这个问题,但它似乎没有工作。

protected override void OnSleep()
        
            StorageHelper.SetSleepTime(DateTime.Now);
            StorageHelper.PersistStorage();
            ApiHelper.CurrentAccess.CancelAllRequests();
        

        protected override void OnResume()
        
            var access = ApiHelper.RefreshApiAccess();
            access.UseCredentialGenerator = true;
            var sleepTime = StorageHelper.GetSleepTime();
            if (!sleepTime.HasValue || DateTime.Now.Subtract(sleepTime.Value).TotalMinutes >= MinutesToSleepForReset)
            
                MainPage = new TransitionNavigationPage(new StartPage());
                StorageHelper.RemoveSleepTime();
            
            else
            
                NavigationHelper.UpdateCartItemCount();
            
        

SetSleepTime 只是存储了调用 OnSleep 方法的时间,所以如果它已经休眠超过 5 分钟,我基本上可以在 OnResume 中重新启动应用程序。

【问题讨论】:

您在 OnResume 中进行的任何 API 调用是否在执行 IO?如果是这样,这可能是问题 - 阻塞 UI 线程。 不,不接电话什么的。我的整个OnResume 都在我的帖子中,所有电话都在OnSleep 中取消。我还删除了我的应用程序中的几乎所有 OnAppearing 以防万一。也就是说,看起来我的代码可能正在运行。我在一个团队中工作,我看到的行为可能是在没有此新代码的应用程序版本上。我今天早上测试了它,它似乎达到了我的预期。 今天/今晚将再试一次以确保。 【参考方案1】:

看起来答案只是确保您没有等待任何 api 调用返回,并确保没有任何东西阻塞 OnResume 上的 ui 线程。检查可能导致此问题的OnAppearing 方法中的登录。

我的问题似乎可以通过在 5 分钟后将我的应用程序重置回我的初始化页面来解决。我在互联网上的某个地方(不记得我会在哪里发布)iOS 允许您的应用在睡眠后继续执行 10 分钟(以完成进程)。所以我认为在那之后的任何时候,它都会为更紧迫的任务重新分配内存,导致应用程序无法从它睡觉时的确切位置继续执行。

【讨论】:

以上是关于Xamarin Forms iOS 在唤醒时冻结的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms CollectionView Infinite Scroll 在一段时间后冻结

使用 Xamarin.Forms 作为背景

在 xamarin.forms (ios) 中启动演示应用程序时出错

如何在单击 xamarin.forms.maps iOS c# 时更改 pin 图标

无法调试在 Xamarin.Forms 中制作的 IOS 应用程序

为啥我的 Xamarin Forms iOS 应用程序在使用 Microsoft Azure 移动服务时崩溃