Обработка нажатий кнопок
Сделал мидлет. Полностью свой графический интерфейс. Курсор перемещается обычными кнопками. На эмуляторе - всё ОК.
Раскидал мидлет по знакомым - около 50 разных тестеров. И оказалось, что обработка нажатий кнопок очень тормозит. Как известно, в MP есть два варианта отлова нажатия: GetKeyPressed (для мгновенного нажатия) и GetkeyClicked (для ситуации нажал-отпустил). Так вот, как показала практика, на подавляющем большинстве телефонов (за исключением самых последних моделей) отлов нажатия очень тормозит! При этом мидлет не делает никаких операций, просто по циклу проверяет наличие нажатой кнопки, и только потом начинает действовать. В таком виде: Код:
repeat key:=getKeyClicked until key<>0; А в таком виде: Код:
repeat key:=getKeyPressed until key<>0; Телефоны: SE K-700, Nokia 5300 и т.п. Как быть? Что делать? Что посоветуете? Может, можно сделать специальную библиотеку для отлова нажатия кнопок более правильным (быстрым) способом ? |
Ответ: Обработка нажатий кнопок
Нужно вставлять Delay в цикле обработки нажатий, т.е. что-то типа
PHP код:
|
Ответ: Обработка нажатий кнопок
Да, сам раньше сталкивался с подобной проблемой. Причем что интересно - чем круче телефон, тем больше тормоза. Зато на самых древних телефонах программа пашет нормально. Избавлялся от демонов - так же. Вставлял Delay(50); и всё работет нормально. Причина тут, видимо, та что я и говорил в хелпе - при выполнении функции Delay телефон не тупо ждет, а на определенное количество миллисекунд позволяет работать другим процессам или приложениям. Если опрос клавы в программе делать без паузы - сам телефон не сможет опрашивать клаву т.к. не будет получать свой квант процессорного времени.
|
Ответ: Обработка нажатий кнопок
Спасибо за инфо.
А указанная хитрость имеет отношение только к GetKeyPressed, или на GetKeyClicked тоже сработает ? |
Ответ: Обработка нажатий кнопок
Тут все дело в том, что код мидлета выполняется в потоке с высоким приоритетом, поэтому вызов любой функции в цикле без задержки не дает системе обрабатывать события. Работа функции Delay основана на приостановке выполнения потока мидлета на указанное время, т.е. вызывая Delay мы останавливаем поток и отдаем процессорное время системе. Так что должно работать и для GetKeyClicked.
|
Часовой пояс GMT +4, время: 10:17. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot