2016-10-26 6 views
1

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

Приложение имеет несколько точек, где мне нужно показать диалог (модальный), после чего пользователи могут заполнить некоторые поля, а затем закрыть диалоговое окно. Таким образом, система следует своему естественному пути.

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

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

Я пробовал прочитать об этой проблеме. Я сделал несколько исследований в подобных вопросах без успеха. Я полагаю, что причина связана с EDT.

Вкратце, как мне позвонить в Dialog Modal, не нарушая EDT-правила. И, более конкретно, как я могу решить эту проблему. , когда я запрашиваю диалог, который будет отображаться на экране, я хочу, чтобы он действительно отображался в 100% случаев. Сегодня работает случайным образом.

Дополнительная информация: Мое приложение использует Java 5 еще. Вы рекомендуете переход на Java 8?

======= Дополнительные Информации (1) ===========

Эта проблема в значительной степени зависит от модели устройства. В MotoG3 (Android 6) эта проблема является исключением. Редко это происходит. В моей Галактике Примечание 8 - это противоположность. Всегда происходит. В Lenovo Vibe5 (Android 6). Часто происходит. Я добавил эти данные. Возможно, это помогает усугубить проблему.

Дополнительный вопрос: Возможно ли написать фрагмент, который я могу использовать в качестве шаблона для выполнения диалога Модальный вызов без нарушения какого-либо правила EDT?

+0

Да, перейдите на Java 8. Последний выпуск java 5 был 7 лет назад. Это будет боль, хотя ... –

+0

Спасибо за ваш комментарий. – hrugani

ответ

0

Включите инструмент обнаружения нарушения EDT в симуляторе, который должен обнаружить такие проблемы. Осмотрите потенциально проблемные случаи звонков Dialog и разместите их специально, если вы не знаете, как их исправить.

Java 8 не имеет отношения, хотя перенос проекта является нетривиальным.

+0

Hi Shai. Использование Simulator Я не могу справиться с этой проблемой. Двунаправленная связь между Javascript и Java не работает. (Я тоже не знаю, но это другая проблема). Могу ли я использовать adb (из Android-sdk) и получать доступ к нарушениям EDT непосредственно с устройства logcat? Двунаправленная связь работает отлично, когда приложение выполняется на физических устройствах. Эта проблема происходит именно в Java-коде, который вызывается из javascript. – hrugani

+0

Код Java, который вызывается из JavaScript, вероятно, будет вызываться в естественном потоке браузера. Чтобы взаимодействовать с пользовательским интерфейсом, вам понадобится callSerially(). –

+0

Я сделал это. Я уже пытался вызвать Dialog, используя Display CallSerially(). Результат был хуже.Сообщение об исключении, сообщающее EDT, со следующим сообщением: Произошла внутренняя ошибка приложения: java.lang.RunTimeException: этот метод НЕ ДОЛЖЕН быть вызван на EDT. – hrugani