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.cs
的OnSleep
和OnResume
方法中设置了一些东西,希望能解决这个问题,但它似乎没有工作。
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 (ios) 中启动演示应用程序时出错
如何在单击 xamarin.forms.maps iOS c# 时更改 pin 图标