使用Xamarin格式的IOS中的DidReceiveMemoryWarning

gxwragnw  于 2022-12-07  发布在  iOS
关注(0)|答案(3)|浏览(146)

如何使用xamarin表单捕获DidReceiveMemoryWarning?
在xamarin studio中调试时,我可以在应用程序输出中看到它们,但我找不到如何捕捉事件或如何查看使用了多少内存。
我尝试了AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize,但它抛出了一个未实现的异常

nr7wwzry

nr7wwzry1#

在iOS中有3种方法可以捕捉内存警告(或者至少是我所知道的:)
这三种方式分别是:
1.在ViewControllers中,你可以覆盖DidReceiveMemoryWarning()并处理警告。对于Xamarin.Forms来说,这不是最好的方法,因为你没有UIViewController来覆盖这些方法,所以请转到选项2和3。
1.在你的AppDelegate中,覆盖ReceiveMemoryWarning方法。当iOS内存不足时,这个方法会被触发。你可以将这个方法连接到你的PCL代码中的任何代码,或者在你的平台特定的项目中处理它。

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项目以释放一些内存。
您还可以使用以下命令在模拟器上测试此功能
硬件〉〉模拟内存警告

arknldoa

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:

du7egjpx

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)。

相关问题