Дизайн нескольких обработчиков Android - PullRequest
2 голосов
/ 14 мая 2010

Этот вопрос относится к существующему вопросу , который я задал. Хотя я задам новый вопрос вместо того, чтобы отвечать на другой вопрос.

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

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

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

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

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

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

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

Спасибо.

1 Ответ

3 голосов
/ 14 мая 2010

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

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

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

...