Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое обновление мидлета 
:(
    Опции темы
n1ke
Дата 30.7.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.12.2006

Репутация: нет
Всего: нет



Всем привет!

Есть потребность обновлять мидлет динамически, то-есть, мидлет периодически чекает сервер в поиске новой версии и если таковая есть, то скачивает её и инсталит. Вопрос такой, это ваще реально и если да, то как это можно сделать?
PM   Вверх
W0LF
Дата 31.7.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20




Цитата

Midlet
boolean  platformRequest(String URL)
          Requests that the device handle (for example, display or install) the indicated URL.



--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Выхухоль
  Дата 10.10.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 9.10.2008
Где: Ташкент

Репутация: 2
Всего: 2



W0LF,  Что то непонятно что это означает?

Мне кстати тоже  очень интересно есть ли способы обновления мидлета? smile 
PM MAIL ICQ   Вверх
eugine_s
Дата 10.10.2008, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Выхухоль @  10.10.2008,  15:53 Найти цитируемый пост)
Что то непонятно что это означает?


1. Midlet.platformRequest("http://site.com/update.jad");
2. Midlet.notifyDestroyed();

Код

Midlet.platformRequest("http://site.com/update.jad");


platformRequest() откроет встроенные браузер телефола и браузер будет открывать ссылку (http://site.com/update.jad)

наверное лучше сразу за платформРеквест закрывать мидлет: 1) не все телефоны могу вызвать платформРеквест паралельно с выполнением мидлета 2) мидлет все равно нужно будет закрыть перед обновлением.

PM MAIL   Вверх
Окунь
Дата 13.10.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.2.2007
Где: Москва

Репутация: 2
Всего: 2



Цитата

наверное лучше сразу за платформРеквест закрывать мидлет: 1) не все телефоны могу вызвать платформРеквест паралельно с выполнением мидлета 2) мидлет все равно нужно будет закрыть перед обновлением.


1) это так. Если совсем точно, то по возвращаемому значению платформРеквест можно узнать, необходимо ли закрыть мидлет или можно оставить приложение работать в фоне

2) на небольшой части телефонов можно переустанавливать приложение не закрывая его(!). Правда, сам я знаю только одну такую модель - SonyEricsson G502. Но скорее всего, эта функция поддерживается всеми сониэриксонами JP-8
PM MAIL   Вверх
Dummy
Дата 13.10.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



Мидлет вообще не должен заботиться о совершении самоубийства при запуске обновления по platformRequest().  Он должен обрабатывать соответствующим образом возвращаемое значение от platformRequest(), содержать необходимую обработку в destroyApp() и / или в destroyApp(), и только. По MIDP 2.0, платформа сама должна решить, нужно ли ей прибить текущий мидлет или нет.
PM MAIL   Вверх
Окунь
Дата 13.10.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.2.2007
Где: Москва

Репутация: 2
Всего: 2



Цитата

Мидлет вообще не должен заботиться о совершении самоубийства при запуске обновления по platformRequest()

Должен. Мое прочтение) явадоков к платформРеквест: если платформа не может выполнить запрос до завершения мидлета, то она не обязана предпринимать попытки к его завершению. Она будет просто ждать, пока мидлет сам себя не закроет.

Это сообщение отредактировал(а) Окунь - 13.10.2008, 16:51
PM MAIL   Вверх
Dummy
Дата 13.10.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



Цитата(Окунь @  13.10.2008,  16:50 Найти цитируемый пост)
Должен. Мое прочтение) явадоков к платформРеквест: если платформа не может выполнить запрос до завершения мидлета, то она не обязана предпринимать попытки к его завершению. Она будет просто ждать, пока мидлет сам себя не закроет.

Не должен. Мое прочтение явадоков к платформРеквест:
Цитата

If the MIDlet suite being installed is an update of the currently running MIDlet suite, the platform MUST first stop the currently running MIDlet suite before performing the update. On some platforms, the currently running MIDlet suite MAY need to be stopped before any installations can occur.

"Если устанавливаемый мидлет является обновлением запущенного в настоящий момент мидлета, платформа ОБЯЗАНА остановить исполняемый мидлет перед выполнением обновления. На некоторых платформах исполняемый мидлет МОЖЕТ быть остановлен перед выполнением установки."

Итак, требование следующее: если платформа умеет выполнять обновление и при этом держать мидлет запущенным, она имеет право не убивать мидлет. Во всех остальных случаях она ДОЛЖНА безжалостно его уничтожить.
PM MAIL   Вверх
vdweller
Дата 14.10.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(Dummy @ 13.10.2008,  18:34)
Итак, требование следующее: если платформа умеет выполнять обновление и при этом держать мидлет запущенным, она имеет право не убивать мидлет. Во всех остальных случаях она ДОЛЖНА безжалостно его уничтожить.

В документации это конечно хорошо, но фактически я например сталкивался с тем же сониэриком K700i который при попытке обновить работающий мидлет просто вис. Что тогда говорить про всякие LG и самсунги.
PM MAIL   Вверх
Окунь
Дата 14.10.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.2.2007
Где: Москва

Репутация: 2
Всего: 2



Цитата

Итак, требование следующее: если платформа умеет выполнять обновление и при этом держать мидлет запущенным, она имеет право не убивать мидлет. Во всех остальных случаях она ДОЛЖНА безжалостно его уничтожить.


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

Цитата

If the platform has the appropriate capabilities and resources available, it SHOULD bring the appropriate application to the foreground and let the user interact with the content, while keeping the MIDlet suite running in the background. If the platform does not have appropriate capabilities or resources available, it MAY wait to handle the URL request until after the MIDlet suite exits. In this case, when the requesting MIDlet suite exits, the platform MUST then bring the appropriate application (if one exists) to the foreground to let the user interact with the content.

PM MAIL   Вверх
Окунь
Дата 14.10.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.2.2007
Где: Москва

Репутация: 2
Всего: 2



Я согласен с vdweller: лучше не полагаться на документацию, если код должен работать на большом числе телефонов, и всегда закрывать мидлет самостоятельно перед обновлением. Думаю, немало разработчиков ява-машин прочитало ту же самую документацию по-своему, не как я или Dummy  smile 
Например, на многих самсунгах вообще невозможно обновить мидлет, пока не удалишь старую версию. У них, на сколько знаю, ява машина даже не сертифицирована на соответствие MIDP. Поэтому документация им не указ. smile 
PM MAIL   Вверх
Dummy
Дата 14.10.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



Цитата(vdweller @  14.10.2008,  09:29 Найти цитируемый пост)
В документации это конечно хорошо, но фактически я например сталкивался...

И что, отказываемся от чтения спецификаций вовсе?smile Если я расскажу обо всем, с чем я сталкивался по долгу службы в работе с мобильными джавами, меланхоличным людям может стать грустно и мучительно больно за J2ME. Баги в реализациях MIDP были и будут, но это частные случаи, а общий знаменатель - это спецификация, которой придерживаются производители JVM.

Цитата(Окунь @  14.10.2008,  09:57 Найти цитируемый пост)
Например, на многих самсунгах вообще невозможно обновить мидлет, пока не удалишь старую версию. У них, на сколько знаю, ява машина даже не сертифицирована на соответствие MIDP. Поэтому документация им не указ

Строго говоря, JVM, не прошедшая MIDP TCK-сертификацию, вообще не может гарантировать выполнение мидлетов))) Так что приводить такие примеры - это не очень содержательно. Такие бардачные реализации, как у корейских производителей, ориентированы в основном на предустановленные мидлеты. 

Цитата(Окунь @  14.10.2008,  09:40 Найти цитируемый пост)
Как я понимаю: после запуска процесса обновления платформа должна закрыть мидлет. Но обновление будет запущено только после того, как платформа сходит по адресу указанному в урле. Пока не будет загружены данные по этому урлу, платформа не знает, что речь идет об апдейте, поэтому насильно закрывать мидлет она не должна. Запрос будет обработан, как обычное обращение по хттп адресу: т.е. на некоторых платформах браузер будет открыт только после того, как мидлет сам себя закроет:

Да, вот с этим соглашусьsmile Но опять-таки, мидлет НЕ ДОЛЖЕН выходить для того, чтобы platformRequest() отработал, как нужно. Да, обновление будет отложено до выхода, но все равно произойдет, если следующий platformRequest() его не перекроет. Другое дело, если мидлет хочет немедленного эффекта - тут да, необходимо выйти.

Цитата(Окунь @  14.10.2008,  09:57 Найти цитируемый пост)
Я согласен с vdweller: лучше не полагаться на документацию, если код должен работать на большом числе телефонов

Во даже как сильно. Боюсь, с такими заключениями больному станет еще хуже, чем если бы мы следовали спецификациям буква в букву. К сожалению, по собственному опыту знаю, что баги в реализации JVM часто связаны именно с тем, что некоторая часть разработчиков 
Цитата
прочитала ту же самую документацию по-своему
, а не как там написано. Тоже, знаете ли, не полагались на документацию)))

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




Это сообщение отредактировал(а) Dummy - 14.10.2008, 10:45
PM MAIL   Вверх
Окунь
Дата 14.10.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.2.2007
Где: Москва

Репутация: 2
Всего: 2



Цитата

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


Я полностью под этим подпишусь, если добавить еще один пункт: код надо подстраивать не только под баги сертифицированных ява-машин, но и под баги несертифицированных.
Мы пишем не для производителя телефонов. Мы пишем для обычных пользователей. А им все равно, что за ява-машина у них на телефоне. Поэтому самсунги занимают второе место по продажам в России. И нам придется мириться с тем, что самсунговские разработчики не умеют читать документацию. 
Так что не надо меня упрекать в пренебрежении к стандартам. Правила игры устанавливаю не я (не пишу JVM). И из документации беру только то, что будет точно работать везде. А кода, где возможны разночтения, стараюсь избегать. Поэтому перед обновлением мидлета обязательно его закрою.

Это сообщение отредактировал(а) Окунь - 14.10.2008, 11:08
PM MAIL   Вверх
Dummy
Дата 14.10.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



Цитата(Окунь @  14.10.2008,  11:05 Найти цитируемый пост)
Мы пишем не для производителя телефонов. Мы пишем для обычных пользователей ... самсунги занимают второе место по продажам в России. И нам придется мириться с тем, что самсунговские разработчики не умеют читать документацию. 

ППКС, что ж тут сделаешь. Ситуация со стандартизацией в J2ME плачевная.

Цитата(Окунь @  14.10.2008,  11:05 Найти цитируемый пост)
Так что не надо меня упрекать в пренебрежении к стандартам. 

И не думал. Мы тут, на форуме, обсуждаем всякие вопросы о программировании, упреками не занимаемся))) Чесслово, я вечерами не молюсь на спецификации smile  Просто придерживаюсь того мнения, что спецификации для того и созданы, чтобы разработчикам можно было не привязываться к конкретной платформе, а писать код по стандартам. И пытаюсь предостеречь от лишнего пренебрежения спецификациями просто потому, что разработчик, вместо того, чтобы, например, попытаться понять причину того или иного неожиданного поведения, будет спихивать это на плохое следование стандартам и накручивать в мидлете новую привязку к багам платформы.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.