Компактный фреймворк - система.Потоковая передача.Таймер останавливается, когда пользователь выключает экран

StackOverflow https://stackoverflow.com/questions/284300

Вопрос

У меня есть приложение, которому необходимо "опросить" веб-сервис, чтобы узнать, ожидают ли пользователя какие-либо новые сообщения.У меня нет контроля над веб-сервисом, поэтому я не могу переключиться на механизм "push", я застрял, делая запрос каждые X секунд, чтобы посмотреть, что доступно.

Я использую System.Threading.Таймер для выполнения запроса время от времени, но сталкиваюсь с несколькими проблемами.Самым большим является то, что он перестает работать, когда телефон переводится в режим "ожидания" (экран выключен, но по-прежнему может принимать звонки и уведомления по электронной почте / txt).

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

Это было полезно?

Решение

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

Другие советы

Ты ничего не можешь сделать, AFAIK. Режим ожидания предназначен для приостановки процессора для экономии энергии, и ваш код не сможет выполняться, если процессор не работает. Ваше приложение может сделать что-то, чтобы предотвратить переход устройства в режим ожидания, но на самом деле это вообще не рекомендуется.

Ага.Подобно тому, как ответила MusiGenesis, вы мало что сможете сделать, не поддерживая устройство в рабочем состоянии.Аналогично тому, как некоторые телефоны уведомляют о том, что "Игра / приложение запущено", и, таким образом, ваша батарея разряжается.

Как насчет того, чтобы написать интерфейс со своего телефона для использования текстовых сообщений (который все еще работает) и заставить его отправлять текстовое сообщение веб-службе?Возможно ли это?Я предполагаю, что такой метод также может перестать работать, но я полагаю, что это мысль?

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

Хотя вы не можете изменить веб-сервис, вы можете добавить вторую " тень " веб-сервис между вашими клиентами и оригинальным веб-сервисом. Теневой веб-сервис может опрашивать исходный веб-сервис, а затем «нажать» все, что он узнает на КПК.

Думаю, у тебя все еще может быть та же проблема. Я никогда не делал "толчок" из веб-сервиса, но я думаю, что это в основном реализовано тем, что клиент делает первоначальный вызов метода веб-сервиса, который принимает делегата к методу в клиенте, который веб-сервис затем вешает. Когда веб-сервису нужно что-то выдвинуть, он вызывает этот делегат. Если клиент перешел в режим ожидания, попытка вызвать делегата с сервера не удастся.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top