Идеальный способ вытащить данные (JSON) из службы с помощью Monotouch и iOS?

У меня есть приложение для iPhone, которое тянет почти все его данные из услуг ASP.NET MVC.

В основном только что вернулся JSON.

Когда я запускаю приложение в симуляторе, данные сбрасываются очень быстро и т. Д. Однако, когда я использую фактическое устройство (3G или WiFi), он очень медленный. До такой степени, что приложение вылетает слишком долго.

a) Должен ли я не звонить услуге из метода FinishedLaunching в AppDelegate?

б) Я неправильно звоню в службу?

Метод, который я использую, выглядит примерно так:

public static JsonValue GetJsonFromURL(string url) { var request = (HttpWebRequest)WebRequest.Create (url); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; using(var response = (HttpWebResponse)request.GetResponse()) { using(var streamReader = new StreamReader(response.GetResponseStream())) { return JsonValue.Load(streamReader); } } } 

Есть ли лучший или быстрый способ, которым я должен обращаться к службе? Я читал о том, как делать что-то в разных потоках или выполнять асинхронные вызовы, чтобы не блокировать пользовательский интерфейс, но я не уверен, какой лучший подход или как этот код будет работать.

One Solution collect form web for “Идеальный способ вытащить данные (JSON) из службы с помощью Monotouch и iOS?”

a) Должен ли я не звонить услуге из метода FinishedLaunching в AppDelegate?

Вы получаете ограниченное время для запуска своего приложения, т. Е. FinishedLaunching из FinishedLaunching или сторожевой таймер iOS убьет ваше приложение. Это примерно 17 секунд (но может варьироваться в зависимости от версий устройств / iOS).

Все, что занимает некоторое время, лучше сделать в другом потоке, запущенном с FinishedLaunching . Еще более важно, если вы используете сетевые службы, поскольку не можете быть уверены, сколько времени (или даже если) вы получите ответ.

б) Я неправильно звоню в службу?

Это выглядит хорошо. Однако помните, что симулятор имеет более быстрый доступ к сети (скорее всего), намного больше ОЗУ и мощности ЦП. Большой набор данных может потребовать много времени на память / процессор для декодирования.

Запуск из другого потока, по крайней мере, потребует дополнительного времени. Это может быть так же просто, как добавить код (ниже) в ваш FinishedLaunching .

 ThreadPool.QueueUserWorkItem (delegate { window.BeginInvokeOnMainThread (delegate { // run your code }); }); 

Вы можете посмотреть, как Touch.Unit делает это, глядя на исходный файл TouchRunner.cs .

Примечание. Возможно, вы захотите протестировать, не используя (запрашивая) сжатые данные, так как время / память для распаковки может оказаться нецелесообразным на устройствах (по сравнению с симулятором). Фактическое тестирование необходимо подтвердить;)

  • MonoTouch - создание пользовательского интерфейса без Xib
  • Представление Xamarin Studio 64-битное приложение для appstore
  • iOS 7 - Скрыть строку состояния на контроллере детского просмотра
  • Как сделать скриншот iPhone / iPad программно с Xamarin.iOS (C #)?
  • Как выбрать правильное устройство iPhoneSimulator из Visual Studio? (iPhoneSimulator всегда запускает 3,5-дюймовое устройство)
  • Измененные размеры кадров ячеек UITableView не обновляются
  • Xamarin iOS - Push Push-уведомления - отличное уведомление о нажатии
  • Добавление изображения в раздел в Monotouch.Dialog
  • Как реализовать UISearchBar в MonoTouch
  • Принесите следующий набор изображений в RestSharp
  • Сертификаты клиента HTTPS с Monotouch
  • Interesting Posts

    Распознавание цвета камеры iOS в режиме реального времени: отслеживание мяча

    iOS проверяет, доступна ли сотовая технология, даже если устройство подключено к WiFi

    Отключить эффект вертикального отражения в веб-приложении ipad

    Как запросить AdMob Interstitial перед переходом для немедленного показа объявлений

    Метод удаления 2-й метки, затем первая метка, не работает правильно

    Facebook Graph API v2.1 Уведомление об обновлении – iOS

    Воспроизведение аудио с помощью AVAudioPlayer iOS 7

    возможно ли разработать приложение, которое будет отслеживать использование других приложений?

    UIWindow setRootViewController не очищает существующую иерархию

    Задержка при отображении UIButtons после представления SKScene?

    UISwipeGestureRecognizer конфликтует с UIScrollView

    Определите недействительные токены из уведомлений Apple Push

    Импорт данных в приложение iOS, теперь, когда iCloud заменил iTunes

    Доступ к Photos.sqlite в iOS для получения метаданных фотографий

    Core Data uniquing не работает?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.