Можно ли загрузить данные как фоновый процесс в j2me? - PullRequest
3 голосов
/ 13 февраля 2009

Даже при плохом сетевом соединении?

В частности, я написал код, который запускает отдельный поток (из пользовательского интерфейса), который пытается загрузить файл через HTTP POST. Однако, я обнаружил, что если соединение плохое, процессор застревает на outputtream.close () или httpconnection.getheaderfield () или любых операциях чтения / записи, которые передают данные по сети. Это приводит не только к зависанию потока, но и краже всего процессора, поэтому даже пользовательский интерфейс перестает отвечать на запросы.

Я пытался снизить приоритет потока, но безрезультатно.

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 15 февраля 2009

Одним из важных аспектов является необходимость иметь общий интерфейс или экран, который может отображаться при сбое сетевого вызова в фоновом режиме. Это обязательное условие для любого мобильного приложения, J2ME или любого другого.

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

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

Некоторые телефоны в J2ME позволяют обнаруживать режим полета, если это возможно, вы можете обнаружить это и быстро отобразить соответствующий экран.

Также один дизайн, который работал для меня, - это синхронизация пользовательского интерфейса и сетевых потоков, чтобы они не блокировали друг друга (примите этот совет с большой дозой соли, поскольку у меня было довольно много интересных ошибок на некоторых samsung и из-за этого телефоны sanyo)

В целом, нет хорошего ответа для вас, но разные стратегии.

1 голос
/ 13 февраля 2009

Это в значительной степени зависит от того, как вы пишете код и где вы его запускаете. В CLDC концепция многопоточности довольно ограничена, и, если какой-либо поток выполняет какую-то длительную операцию, другие потоки могут быть (и обычно) также заблокированы этим. Это следует учитывать при разработке приложения.

0 голосов
/ 09 марта 2009

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

...