2010-05-14 2 views
2

Этот вопрос относится к existing question Я спросил. Я, однако, задаю новый вопрос вместо ответа на другой вопрос.Android Multiple Handlers Design

«У меня более одного обработчика в действии». Зачем? Если вам не нужен сложный метод handleMessage(), используйте post() (на Handler или View), чтобы разбить логику на отдельную Runnables. Несколько Handlers заставляет меня нервничать. - CommonsWare

Я новичок в Android. Мой вопрос: есть ли у нескольких обработчиков в одном действии плохой дизайн?

Вот эскиз моей текущей реализации.

У меня есть mapActivity, который создает поток данных (UDP-сокет, который прослушивает данные). Мой первый обработчик отвечает за отправку данных из потока данных в активность.

На карте У меня есть куча «динамических» маркеров, которые часто бывают refreshed. Некоторые из этих маркеров являются видеомаркерами, то есть, если пользователь нажимает на маркер видео, я добавляю ViewView, который расширяет android.opengl.GLSurfaceView до моей активности на карте и отображает видео на этом новом видео. Я использую свой второй обработчик для отправки информации о маркере, который пользователь нажал на ItemizedOverlayonTap(int index).

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

Буду признателен, если люди скажут мне, что не так с этим подходом, и предложите лучшие способы его реализации.

Спасибо.

ответ

3

Как я писал в своем предыдущем комментарии, я бы не использовал для этого несколько объектов Handler.

Что касается UDP сокет потока, вы можете придерживаться с существующими Handler или использовать post() на вашем MapView, чтобы опубликовать Runnable в основном потоке приложения или использовать runOnUiThread() на вашем MapActivity.

В отношении вашего «второго обработчика» для отправки информации о маркере, который пользователь прослушивал с помощью метода ItemizedOverlay onTap (int index), onTap() будет вызываться в главном потоке приложения, и поэтому вам не нужно использовать Handler. То же самое верно для вашего третьего Handler.

+0

Но ... кроме того, что это плохое представление, что произойдет, если у вас есть несколько обработчиков? Они оба получают все сообщения, только первые объявленные, только второй? Думаю, и то, и другое, но если вы можете дать мне ответ без меня, чтобы его закодировать, я был бы счастлив! –

+1

@ type-a1pha: Ничего из вышеперечисленного. Часть протокола для отправки «сообщения» указывает, какой «обработчик» должен быть получателем сообщения. Следовательно, никогда не возникает вопроса о том, какой «Handler» получает сообщение, независимо от количества объектов «Handler», которые могут быть выдающимися. – CommonsWare

+0

Да, право ... стыдно за меня! –