DidReceiveMemoryWarning в IOS с использованием Xamarin Forms

Как вы можете поймать DidReceiveMemoryWarning, используя формы xamarin.

Я вижу их в выводе приложения при отладке в xamarin studio, но не могу найти, как поймать событие или как узнать, сколько памяти используется.

Я пробовал AppDomain.CurrentDomain.MonitoringTotalAllocatedMemorySize, но выдает нереализованное исключение.


person Steve    schedule 28.08.2014    source источник
comment
iosapi.xamarin.com/   -  person Sten Petrov    schedule 28.08.2014
comment
да, я видел, что просто не мог понять, как это сделать в Xamarin Forms, поскольку rootviewcontroller генерируется автоматически. window.RootViewController = App.GetMainPage().CreateViewController();   -  person Steve    schedule 29.08.2014
comment
Я бы скопировал код из Xamarin.Forms.IOS.Platform, добавил обработчик памяти и сделал свою собственную копию корневым контроллером представления. Я знаю, что это взломано, но это должно помочь вам устранить неполадки, а затем вы сможете вернуться к своему текущему коду с исправлением.   -  person Sten Petrov    schedule 29.08.2014


Ответы (2)


Есть 3 способа захвата предупреждений о памяти в iOS (или, по крайней мере, это то, о чем я знаю :)

Вот эти три способа:

  1. В ваших ViewControllers вы можете переопределить DidReceiveMemoryWarning() и обработать там предупреждение. Это не лучший способ для Xamarin.Forms, поскольку у вас нет UIViewController для переопределения этих методов, поэтому перейдите к вариантам 2 и 3.

  2. В вашем AppDelegate переопределите метод ReceiveMemoryWarning. Это будет запущено, когда в iOS будет мало памяти. Вы можете связать этот метод с любым кодом, который у вас есть в вашем коде PCL, или просто обработать его в своем проекте для конкретной платформы.

    public override void ReceiveMemoryWarning (UIApplication application)
    {
            // handle low memory warnings here
    }
    
  3. Вы можете использовать iOS NotificationCentre для получения уведомления при наличии предупреждения о памяти. Это можно сделать так:

    // Method style void Callback (NSNotification notification) 
    {
            Console.WriteLine ("Received a notification UIApplication", notification);
    }
    
    void Setup () 
    {
            NSNotificationCenter.DefaultCenter.AddObserver (UIApplication.DidReceiveMemoryWarningNotification, Callback); 
    }
    

Затем вы можете подключить этот «CallBack» к вашему проекту PCL, чтобы освободить память.

Вы также можете проверить это на симуляторе, используя

Аппаратное обеспечение >> Имитация предупреждений о памяти

person Has AlTaiar    schedule 02.03.2016

Вы можете переопределить DidReceiveMemoryWarning в своем проекте iOS и оттуда уведомить страницы Xamarin.Forms. Я могу придумать много способов добиться этого, но вот 2 наиболее очевидных:

person Stephane Delcroix    schedule 03.09.2014
comment
да, вы можете переопределить DidReceiveMemoryWarning, если создадите свой собственный UIViewController, но UIViewController создается для вас с помощью методов App.GetMainPage().CreateViewController() в Forms, поэтому я не был уверен, как его переопределить. - person Steve; 03.09.2014