如何使用xamarin表单捕获DidReceiveMemoryWarning?在xamarin studio中调试时,我可以在应用程序输出中看到它们,但我找不到如何捕捉事件或如何查看使用了多少内存。我尝试了AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize,但它抛出了一个未实现的异常
nr7wwzry1#
在iOS中有3种方法可以捕捉内存警告(或者至少是我所知道的:)这三种方式分别是:1.在ViewControllers中,你可以覆盖DidReceiveMemoryWarning()并处理警告。对于Xamarin.Forms来说,这不是最好的方法,因为你没有UIViewController来覆盖这些方法,所以请转到选项2和3。1.在你的AppDelegate中,覆盖ReceiveMemoryWarning方法。当iOS内存不足时,这个方法会被触发。你可以将这个方法连接到你的PCL代码中的任何代码,或者在你的平台特定的项目中处理它。
DidReceiveMemoryWarning()
AppDelegate
ReceiveMemoryWarning
public override void ReceiveMemoryWarning (UIApplication application) { // handle low memory warnings here }
1.您可以使用iOS NotificationCentre在出现内存警告时接收通知。操作如下:
// Method style void Callback (NSNotification notification) { Console.WriteLine ("Received a notification UIApplication", notification); } void Setup () { NSNotificationCenter.DefaultCenter.AddObserver (UIApplication.DidReceiveMemoryWarningNotification, Callback); }
然后,您可以将此"回调"连接到PCL项目以释放一些内存。您还可以使用以下命令在模拟器上测试此功能硬件〉〉模拟内存警告
arknldoa2#
You can override DidReceiveMemoryWarning in you iOS project, and from there notify the Xamarin.Forms pages. I can think of many ways to achieve this, but here are the 2 more obvious:
DependencyService
du7egjpx3#
最简单的方法是重写AppDelegate.cs中的ReceiveMemoryWarning,如下所示-
[Export("applicationDidReceiveMemoryWarning:")] public override void ReceiveMemoryWarning(UIApplication application) { try { base.ReceiveMemoryWarning(application); Console.WriteLine("****************************************************************"); Console.WriteLine("****************RECIEVED MEMORY WARNING***********************"); Console.WriteLine("****************************************************************"); Console.WriteLine("TOTAL MEMORY {0}",GC.GetTotalMemory(false)); AnalyticsService.Current.TrackUserActions("RECIEVED MEMORY WARNING"); } catch (Exception ex) { AnalyticsService.Current.TrackException(ex); } }
每次iOS在内存不足的情况下运行时,都会调用此方法并使应用崩溃。在应用启动后或任何您想要检查可用内存的地方,可以通过调用此方法GC.GetTotalMemory(false)来检查分配/可用的总内存(RAM)。
3条答案
按热度按时间nr7wwzry1#
在iOS中有3种方法可以捕捉内存警告(或者至少是我所知道的:)
这三种方式分别是:
1.在ViewControllers中,你可以覆盖
DidReceiveMemoryWarning()
并处理警告。对于Xamarin.Forms来说,这不是最好的方法,因为你没有UIViewController来覆盖这些方法,所以请转到选项2和3。1.在你的
AppDelegate
中,覆盖ReceiveMemoryWarning
方法。当iOS内存不足时,这个方法会被触发。你可以将这个方法连接到你的PCL代码中的任何代码,或者在你的平台特定的项目中处理它。1.您可以使用iOS NotificationCentre在出现内存警告时接收通知。操作如下:
然后,您可以将此"回调"连接到PCL项目以释放一些内存。
您还可以使用以下命令在模拟器上测试此功能
硬件〉〉模拟内存警告
arknldoa2#
You can override DidReceiveMemoryWarning in you iOS project, and from there notify the Xamarin.Forms pages. I can think of many ways to achieve this, but here are the 2 more obvious:
DependencyService
as a DI container, but you can use the one you want: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/du7egjpx3#
最简单的方法是重写AppDelegate.cs中的ReceiveMemoryWarning,如下所示-
每次iOS在内存不足的情况下运行时,都会调用此方法并使应用崩溃。在应用启动后或任何您想要检查可用内存的地方,可以通过调用此方法GC.GetTotalMemory(false)来检查分配/可用的总内存(RAM)。