Перейти к содержанию
Fire Monkey от А до Я
  • 0

Отправка данных по http в фоновом режиме


M1shQa

Вопрос

И снова я к Вам за советом, господа. Задачка: пользователь кидает телефон в карман и в фоновом режиме программа сама проверяет каждые секунд 15 наличие новой строки в стринглисте, который цепляется с файла и пытается отправить http запрос. Как мне до этого подсказали копать надо в сторону сервисов. Что же, начал: создал сервис, прицепил к приложению, кинул на него таймер и http от indy, написал кучу кода. Как итог - сервис виден в процессах но таймер не срабатывает и ничего не происходит (запускаю приложение, что бы запустить сервис, выхожу из него и жду проверяя данные на сервере). Но происходит совсем ничего. Туда ли я вообще полез или это нужно реализовывать как то иначе? Стоит local сервис, может проблема в этом? Ниже в темах писали что таймер не работает или еще что, при компиляции ничего не ругается, хотя условий там море и т.д. Все данные которые мне нужно отправить цепляются из текстовых файлов и далее в TStringList..  Понятное дело что такой сервис будет жрать батарейку и кучу трафика, но они так и так тратятся пользователем в "ручном" режиме :(

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

возможно первый раз я скомпилил прогу с пустым сервисом для проверки, как оно вообще выглядит и надо ребилднуть сам сервис, завтра попробую на рабочем месте и отпишусь :o 

Ссылка на комментарий
  • 0
53 минуты назад, MikeWuzHere сказал:

  Понятное дело что такой сервис будет жрать батарейку и кучу трафика, но они так и так тратятся пользователем в "ручном" режиме :(

Честно, слабо представляю, как ваше творение будет работать всегда.... каждые 15 секунд!!! Это не просто будет жрать батарейку, это как мороженное в пустыне Сахара. Отдача данных через 3G-4G - это очень энергоемкий процесс.

Ссылка на комментарий
  • 0
2 минуты назад, Vitaldj сказал:

Честно, слабо представляю, как ваше творение будет работать всегда.... каждые 15 секунд!!! Это не просто будет жрать батарейку, это как мороженное в пустыне Сахара. Отдача данных через 3G-4G - это очень энергоемкий процесс.

Для этого закуплен был пак мобильников и роздан рабочим, начальство требует :(

Ссылка на комментарий
  • 0
28 минут назад, MikeWuzHere сказал:

Для этого закуплен был пак мобильников и роздан рабочим, начальство требует :(

Извините за прямоту)))) но вы сначала покупаете железо и все такое, а потом думаете и ставите задачу? Может нужно было наоборот? И я не совсем плнял, откуда беруться данные? Геолокация?

Ссылка на комментарий
  • 0
4 часа назад, MikeWuzHere сказал:

И снова я к Вам за советом, господа. Задачка: пользователь кидает телефон в карман и в фоновом режиме программа сама проверяет каждые секунд 15 наличие новой строки в стринглисте, который цепляется с файла и пытается отправить http запрос. Как мне до этого подсказали копать надо в сторону сервисов. Что же, начал: создал сервис, прицепил к приложению, кинул на него таймер и http от indy, написал кучу кода. Как итог - сервис виден в процессах но таймер не срабатывает и ничего не происходит (запускаю приложение, что бы запустить сервис, выхожу из него и жду проверяя данные на сервере). Но происходит совсем ничего. Туда ли я вообще полез или это нужно реализовывать как то иначе? Стоит local сервис, может проблема в этом? Ниже в темах писали что таймер не работает или еще что, при компиляции ничего не ругается, хотя условий там море и т.д. Все данные которые мне нужно отправить цепляются из текстовых файлов и далее в TStringList..  Понятное дело что такой сервис будет жрать батарейку и кучу трафика, но они так и так тратятся пользователем в "ручном" режиме :(

Пытаться сделать из смартфона сервер - УТОПИЯ!

Используйте для этого другие варианты!

Ссылка на комментарий
  • 0
7 часов назад, Vitaldj сказал:

Извините за прямоту)))) но вы сначала покупаете железо и все такое, а потом думаете и ставите задачу? Может нужно было наоборот? И я не совсем плнял, откуда беруться данные? Геолокация?

Нет, идея такая, что пользователь собирает софтиной данные (текстовые) и фото, геоданные и др. выключает программу, а программа уже сама отправляет данные на сервер.Пользователи у нас очень тугие и когда интернета на мобильнике нету они не понимают что делать и начинают трезвонить нам, по этому процесс отправки данных их вообще не должен затрагивать каким-либо способом, данные должны уходить без взаимодействия с пользователем, когда появится интернет, мне такую задачу Шеф поставил, уж что поделать, 

Ссылка на комментарий
  • 0
5 часов назад, wamaco сказал:

Пытаться сделать из смартфона сервер - УТОПИЯ!

Используйте для этого другие варианты!

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

Ссылка на комментарий
  • 0
6 часов назад, ZuBy сказал:

полезно к прочтению

 

Спасибо, скорее всего беда только в таймере? Подскажите пожалуйста, какой тип сервиса использовать, что  бы работало в бэкграунде без запущенного приложения мной?

Ссылка на комментарий
  • 0
  • Модераторы
2 часа назад, MikeWuzHere сказал:

Спасибо, скорее всего беда только в таймере? Подскажите пожалуйста, какой тип сервиса использовать, что  бы работало в бэкграунде без запущенного приложения мной?

я не работаю с сервисами, поэтому подсказать не могу.

почитайте темы на форуме, это уже не раз обсуждалось

Ссылка на комментарий
  • 0
3 часа назад, MikeWuzHere сказал:

Спасибо, скорее всего беда только в таймере? Подскажите пожалуйста, какой тип сервиса использовать, что  бы работало в бэкграунде без запущенного приложения мной?

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

PS. С помощью монитора отслеживайте, выводя лог, или с помощью дебага действительно ли ваш сервис нормально запускается и работает (с TTimer точно не работает).

Ссылка на комментарий
  • 0
14 часов назад, MikeWuzHere сказал:

И снова я к Вам за советом, господа. Задачка: пользователь кидает телефон в карман и в фоновом режиме программа сама проверяет каждые секунд 15 наличие новой строки в стринглисте, который цепляется с файла и пытается отправить http запрос. Как мне до этого подсказали копать надо в сторону сервисов. Что же, начал: создал сервис, прицепил к приложению, кинул на него таймер и http от indy, написал кучу кода. Как итог - сервис виден в процессах но таймер не срабатывает и ничего не происходит (запускаю приложение, что бы запустить сервис, выхожу из него и жду проверяя данные на сервере). Но происходит совсем ничего. Туда ли я вообще полез или это нужно реализовывать как то иначе? Стоит local сервис, может проблема в этом? Ниже в темах писали что таймер не работает или еще что, при компиляции ничего не ругается, хотя условий там море и т.д. Все данные которые мне нужно отправить цепляются из текстовых файлов и далее в TStringList..  Понятное дело что такой сервис будет жрать батарейку и кучу трафика, но они так и так тратятся пользователем в "ручном" режиме :(

Не надо вообще таймер делать для этого. И вообще, никогда таймеры не надо делать, когда можно без них обойтись. Вам в данной задаче надо работать по событиям.

Каждый раз, когда пользователь сделал изменение в стринглисте, вы проверяете, прошло ли с момента последней отправки 15 секунд, а можно и без проверки. Далее вызов startService, с переданными в метод текстом. Сервис стартует с командой отправить переданный текст, отправляет его.

Для этой задачи я бы использовал IntentService, а не LocalService — соответственно не startService, а bindService.

 

Ссылка на комментарий
  • 0
4 минуты назад, Pax Beach сказал:

Не надо вообще таймер делать для этого. И вообще, никогда таймеры не надо делать, когда можно без них обойтись. Вам в данной задаче надо работать по событиям.

Каждый раз, когда пользователь сделал изменение в стринглисте, вы проверяете, прошло ли с момента последней отправки 15 секунд, а можно и без проверки. Далее вызов startService, с переданными в метод текстом. Сервис стартует с командой отправить переданный текст, отправляет его.

Для этой задачи я бы использовал IntentService, а не LocalService — соответственно не startService, а bindService.

 

У меня опыта практически нету, по этому первое, что пришло в голову делать через таймер, сейчас пришли другие идеи, спасибо за подсказки, выручили!

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...