Выполнять задачу даже в фоновом режиме

Возможный дубликат:
Как запустить приложение в фоновом режиме на Windows Phone?

Я исследую Windows Phone 8 SKD в поисках примеров того, как создать задачу (точнее сказать, FTP-запись), которая будет выполняться периодически, даже если приложение находится в фоновом режиме.

Документация указывает мне на Фон Агенты, поскольку фоновая служба передачи «поддерживает только передачу по протоколам HTTP и HTTPS. FTP не поддерживается». Я пробовал и тестировал образцы, все работает (более или менее), за исключением того факта, что время события фонового агента не может быть установлено. Согласно документации «Периодические агенты обычно запускаются каждые 30 минут», и ни один метод / класс / конструктор не имеет параметра времени / даты. У вас есть ScheduledActionService.LaunchForTest (task, Time), но он должен использоваться только во время отладки, а не в производстве, и может заставить MS отклонить ваше приложение с рынка.

Есть ли какое-либо решение или обходной путь, чтобы мой агент запускался каждую минуту?


person MLProgrammer-CiM    schedule 30.11.2012    source источник
comment
Этот вариант использования не поддерживается. Платформа Windows Phone 8 имеет ограничения на выполнение фоновых задач, чтобы продлить срок службы батареи.   -  person kindasimple    schedule 30.11.2012
comment
Чего вы пытаетесь достичь с помощью регулярных запланированных занятий? Вероятно, есть способ сделать это без фонового агента.   -  person Paul Turner    schedule 30.11.2012
comment
К сожалению, невозможно заставить приложение работать в фоновом режиме чаще, чем каждые 30 минут.   -  person JoshVarty    schedule 30.11.2012
comment
@Tragedian В моем приложении есть отслеживание в реальном времени с одним опросом каждую минуту, и я хочу отправлять несколько строковых сообщений через TCP, при этом каждая позиция записывается каждые 5 минут.   -  person MLProgrammer-CiM    schedule 30.11.2012
comment
Что именно вы отслеживаете? Если это геолокация, есть дополнительные классы для ее поддержки.   -  person Paul Turner    schedule 30.11.2012
comment
Геолокация, да. Я описываю не только получение моих очков. Отправка их по TCP есть. Это должен быть TCP, а не HTTP, ни отдых, ни синхронизация файлов. И максимально экономно, но по разумному графику, не каждые 30 минут.   -  person MLProgrammer-CiM    schedule 30.11.2012
comment
См. Мой ответ на тот же вопрос о полной многозадачности WP8 @ stackoverflow.com/questions/13514064/   -  person JustinAngel    schedule 01.12.2012
comment
Вопрос был не в этом. Я ЗНАЮ, как запускать фоновую задачу, я хочу изменить поведение на менее 30 минут или обходной путь. Почему ТАК закрывают вопросы, не читая их полностью?   -  person MLProgrammer-CiM    schedule 02.12.2012


Ответы (2)


Вы не можете заставить приложение выполнять код каждую минуту, если оно не выполняется на переднем плане. Обычно для фонового выполнения вы используете так называемые PeriodicTask или ResourceIntensiveTask. Первый запускается каждые ~ 28 минут, может использовать не более 6 МБ памяти (11 МБ в WP8) и должен завершить выполнение в течение ~ 20 секунд. Второй может работать дольше и использовать больше памяти, но у него есть некоторые жесткие требования, такие как подключение телефона к сигналу Wi-Fi, зарядного устройства и т. Д.

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

Как использовать отслеживание местоположения и фоновое выполнение в WP8:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj681691(v=vs.105).aspx

person Martin Suchan    schedule 30.11.2012
comment
Я разбираюсь в вопросах геолокации, какое-то время слежу за собой в фоновом режиме. Теперь я хочу отправить эти данные на свой веб-сервис, который должен быть FTP. Вы предлагаете использовать мой метод onLocationChanged? - person MLProgrammer-CiM; 02.12.2012
comment
Моя проблема не в том, как реализовать агент, есть много очень конкретных руководств, настраивать их на запуск каждую минуту. 60 секунд. Ни меньше, ни больше. Характеристики. - person MLProgrammer-CiM; 02.12.2012
comment
Фоновый агент не может запускаться каждую минуту. Все, что вы можете сделать, это использовать выполнение один раз в 30 минут или использовать фоновое выполнение отслеживания местоположения вместе с чем-то вроде msdn.microsoft.com/en-us/library/ - person Martin Suchan; 02.12.2012
comment
@EfEs Да, можно. Геолокация не считается периодической задачей, поэтому вы можете использовать и то, и другое. - person José Leal; 26.04.2013

Нет, платформа WP8 на самом деле не поддерживает фоновые задачи так, как вы думаете. Это преднамеренная попытка ограничить расход заряда батареи за счет работы приложений в фоновом режиме.

Фоновые агенты - это решение, предоставляемое, если вам действительно нужно что-то запускать, когда ваше приложение не активно, но их нельзя запланировать.

Платформа ожидает, что вы переключитесь на модель, в которой операции опроса заменяются push-уведомлениями, а максимально значительная обработка выполняется с устройства.

person Paul Turner    schedule 30.11.2012