Почему тостовые уведомления умирают в случае задержки?

1

Я не уверен, что это точная причина моей проблемы, но я объясню два симптома, которые я заметил:

  • Если я поставил точку останова на Toast.makeText(..). show(), перейдите, а затем подождите несколько секунд перед запуском, тост никогда не появится.
  • У меня есть обратный вызов, который пытается показать тост, но он никогда не появляется. Возможно, я делаю что-то еще неправильно, это строка, о которой идет речь в приложении с открытым исходным кодом бедствия.

Любая помощь или указатели будут оценены,

- убер

  • 0
    Почему вы передаете контекст в метод, а затем используете context.getApplicationContext ()? Кроме того, обычно люди используют ключевое слово «this» при обращении к базовому классу вместо имени класса, как вы делаете. Я не уверен, есть ли какая-то явная разница, вызывающая у вас проблемы.
  • 1
    getApplicationContext был одной из моих попыток исправить проблему. Это все еще не работает, если я просто использую контекст. Причина, по которой не используется «this», заключается в том, что это статический метод, который не требует создания экземпляров (здесь нет «this»).
Теги:

2 ответа

1
Лучший ответ

Хорошо, я понял это. Я предполагаю, что мой обратный вызов выполнялся в потоке пользовательского интерфейса и сразу после того, как тост получил сообщение HTTP и текстовое сообщение, поэтому поток пользовательского интерфейса блокировал сам и не обрабатывал тост. Мое решение помещало всю тяжелую работу в отдельную тему, как было предложено в Toast Immediately и подробно описано здесь http://developer.android.com/guide/appendix/faq/commontasks.html#threading, поэтому после того, как я это сделал, все работает волшебным образом. Проблем с "контекстом" вообще не возникало.

Относительно странности 2 тостов, работающих, а 1 нет, я думаю, что maketext (...). show() каким-то образом обрабатывает часть очереди тостов пользовательского интерфейса и может вызвать появление тоста.

  • 0
    именно так. когда вы ставите точку останова, она останавливает поток пользовательского интерфейса, поэтому не может сразу показать сообщение тоста. к тому времени, когда он снова запустится, истекло время ожидания сообщения, чтобы оно больше не показывалось
1

Удалите бит .getApplicationContext() исходной строки, которую вы связали. Контекст приложения не привязан к Window, поэтому ваш Toast не может на самом деле отображаться. Вместо этого используйте контекст Activity, и он будет работать нормально.

  • 1
    И что касается вашего первого вопроса, Toast может отображаться только для одной из двух заданных длительностей, которые, предположительно, измеряются по системному времени, а не по истекшему времени.
  • 0
    Я удалил бит .getApplicationContext (), и тот же кусок кода все еще не тост. Я заметил, что есть еще одна ошибка, которая заставляет эту часть запускаться дважды, возможно, это как-то влияет на нее. Я проверю снова.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню