| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Nokia s60 2Ed. Выход в инет |
| Автор: eugine_s 3.12.2008, 14:43 |
| Всем привет. Столкнулся с такой проблемой на нокиях (7610, 6260): Мидлет выходит в инет и загружает некие данные (xml-файл). В процессе обработки этих данных может потребоваться еще запросить из инета данные (если в xml прописан какой-то url - то нужно загрузить и его тоже). Суть проблемы: первый запрос выполняется (т.е. xml загружается). Если же нужно выполнить еще дополнительные загрузки данных (url из xml-файла), то мидлет начинает выполнять запрос, НО вот тут и происходит непонятное: JVM не выводит "Разрешить выход в инет?" (в настройках безопасности стоит "спрашивать всегда"). И это сообщение появляется только в том случае, если мидлет свернуть (не обязательно разворачивать сразу, так как иногда даже сразу после сворачивания выводится окно "Разрешить выход в инет?"). После этого мидлет получает из инета нужные данные. Загрузкой данных из инета заниманиет отдельный класс в отдельном потоке. Кто сталкивался, из-за чего такое может происходить? На других телефонах работает нормально (Nokia s60 3ed, SE). |
| Автор: W0LF 3.12.2008, 17:24 | ||
мож в эту сторону глянуть?
|
| Автор: eugine_s 4.12.2008, 17:47 |
| W0LF, спасибо. Но нет, такое не подходит. Проблему решил. Решение: Приоритеты потоков: когда первый запрос делался он выполнялся в потоке с нормальным приоритетом, когда же последующие - они выполнялись с MIN_PRIORIRY. |
| Автор: W0LF 4.12.2008, 22:24 |
| хм.. у меня такое было, но было из-за того, что проскакивало в одно соединение два запроса. а вот насчет приоритета потоков - очень странно, как влияет приоритет? чет не совсем догнал.. |
| Автор: eugine_s 5.12.2008, 14:04 |
| Попробую объяснить... Есть класс Manager - содержит загруженную Модель (из xml файла строится модель). Этих моделей может быть не одна, а несколько, поэтому Manager содержит стек этих моделей. Когда требуется загрузить новый xml, Manager получает об этом сообщение и инициализирует загрузку данных из инета, т.е. обращается к InetLoader-y и ожидает от него ответа. InetLoader стартует новый поток, который загружает данные. По окончанию загрузки InetLoader информирует Manager о окончании загрузки. Manager полученные данные пересылает XmlParser-y, который из этих данных(из xml) формирует Модель. Manager добавляет в стек новую Модель. Но модель уже сама может обнаружить, что у нее не все данные загружены. В таком случае Модель создает у себя новый поток, который в том числе обращается к InetLoader(он тоже создаст у себя поток) за нужными данными. И эта схема плохо работала. Т.е возможно два варианта работы: 1) Manager -> InetLoader Manager инициализирует загрузку данных и ожидает прихода данных от InetLoader. 2) Manager -> Model -> InetLoader В этом случае у потока, который создавался в Model был низкий приоритет и с этим была связана проблема. Но я все равно не понимаю, как может влиять сворачивание мидлета на приоритеты. P.S. наверное намного понятнее будет если сказать, что xml - это на самом деле html-страница (не совсем html, но суть где-то такая же). Из этой xml-ки формируется Модель (текст, ссылки и т.д.). А дополнительные ссылки - это картинки. Добавлено через 1 минуту и 11 секунд P.P.S. Перечитал еще раз - плохо объяснил. Но лучше без кода наверное не смогу объяснить. А код выложить не могу. |
| Автор: W0LF 5.12.2008, 15:36 |
| ога , я тож что-то перечитал и ниасоба понил |