Возможна ли фоновая работа за каждые 1 минуту в ios? - PullRequest
0 голосов
/ 18 марта 2020

Привет, во-первых, мне очень жаль по поводу моего плохого уровня engli sh.

У меня есть приложение. В основном мое приложение работает каждые 1 минуту, используя метод get для получения данных json с сервера. Это возможно в сторону android, и я создал с помощью службы переднего плана.

Но для стороны xamarin. ios как я могу создать? на самом деле мой вопрос это возможно в ios?

1 Ответ

0 голосов
/ 19 марта 2020

Перед этим вы можете провести исследование с заданиями backgrond в iOS.

Самое большое изменение в iOS 7 в отношении фоновых задач - это не то, как задачи реализованы, но когда они запускаются.

Напомним, что до - 1038 * 7 задача, выполняющаяся в фоновом режиме, имела 600 секунд на выполнение. Одной из причин этого ограничения является то, что задача, выполняемая в фоновом режиме, будет держать устройство в активном состоянии в течение всей задачи:

enter image description here

iOS 7 фоновая обработка оптимизирована для увеличения срока службы батареи. В iOS 7 фоновый режим становится возможным c: вместо того, чтобы держать устройство в активном состоянии, задачи уважают, когда устройство переходит в спящий режим, и вместо этого выполняют их обработку кусками, когда устройство просыпается для обработки телефонных вызовов, уведомлений, входящих электронных писем. и другие распространенные прерывания. Следующая диаграмма дает представление о том, как может быть разбита задача:

enter image description here

Поскольку время выполнения задачи больше не является непрерывным, задачи, выполняющие сетевые передачи должен обрабатываться по-разному в iOS 7. Разработчикам рекомендуется использовать NSURlSession API для обработки сетевых передач. В следующем разделе представлен обзор фоновых передач.

Если вы можете сохранить устройство не убитым, вы можете попробовать использовать класс System.Threading.Timer для использования Timer чтобы реализовать то, что вы хотите:

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    private static Timer timer;

    static void Main(string[] args)
    {
        var timerState = new TimerState { Counter = 0 };

        timer = new Timer(
            callback: new TimerCallback(TimerTask),
            state: timerState,
            dueTime: 1000,
            period: 2000);

        while (timerState.Counter <= 10)
        {
            Task.Delay(1000).Wait();
        }

        timer.Dispose();
        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");
    }

    private static void TimerTask(object timerState)
    {
        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.");
        var state = timerState as TimerState;
        Interlocked.Increment(ref state.Counter);
    }

    class TimerState
    {
        public int Counter;
    }
}

Кроме того, сначала делайте c делитесь Фоновыми переводами заметок. Основой фоновых передач в iOS 7 - это новый NSURLSession API.

...