Отдельный класс загрузчика (отдельный поток), доступ к которому осуществляется различными действиями - PullRequest
0 голосов
/ 26 марта 2012

Intro : у меня есть 3 вида деятельности, DashBoard, Feed и Events. DashBoard запускается при запуске приложения. Оттуда пользователь может перейти в канал или события.

Проблема : Я хочу начать загрузку (в отдельном потоке, конечно), когда запустится DashBoard. Оттуда пользователь может перейти к Feed или Events, и загрузка будет выполняться или уже завершена. Действия Feed или Event (которые когда-либо уместны в данном случае) должны быть уведомлены о том, что загрузка завершена и данные доступны. Каков наилучший способ сделать это?

Мой текущий код : у меня есть класс загрузчика DownloadHandler, который инициируется действием DashBoard. Этот класс скачивается в отдельной ветке. Класс отслеживает логическое значение с именем completed. Для него создается значение false, а после завершения загрузки оно изменяется на true.

В настоящее время Мои классы Feed или Events будут опрашивать переменную completed каждые 100 мс или около того в отдельном потоке, чтобы он не блокировал поток пользовательского интерфейса. и когда переменная completed становится true, она вызывает функцию в этом конкретном классе, которая затем запрашивает класс DataHandler для загруженных данных.


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

Я прочитал AsyncTask и другие обратные вызовы, но проблема в том, что я не могу указать обратный вызов в определенном классе. Потому что, когда загрузка завершится, текущая активность может быть DashBoard, Events или Feeds. Нет гарантии, какая активность будет впереди после завершения загрузки.

1 Ответ

1 голос
/ 26 марта 2012

Я бы запустил трансляцию в своем потоке загрузки (для этого настроил фильтр намерений) и зарегистрировал бы получателя в Feeds и Events (не забудьте отменить их регистрацию в onStop ()).Я часто использую это решение для этой цели - оно простое и делает хорошую работу.

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
        }
};

Вы должны решить все остальное самостоятельно :) это не так сложно.Есть много вещей для этого или купите стандартную книгу, чтобы войти в Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...