Android Intent и startActivity по-прежнему необходимы для вызова статических методов? - PullRequest
0 голосов
/ 09 июня 2011

Я думаю, что уже знаю ответ на этот вопрос, потому что, кажется, он немного надуман.Но я серьезно ищу решение.

Предположим, что у меня есть Активность, называемая активностью Bluetooth, которая запускает фоновый поток Bluetooth и поток работает вечно, даже когда Активность Bluetooth исчезает - даон действительно работает вечно. Этот фоновый поток bluetooth - это поток data data , который непрерывно собирает данные, которые будут отображаться в Activity, называя это Plot Activity в режиме реального времени.Мы можем ссылаться на метод построения графика как на статический метод с именем Plot.plotData ();

Моя проблема в том, что я не могу сказать, когда активность Plot активна, поэтому я не могу сказать, когда начинать вызывать Plot.data.().Вы можете подумать, что поскольку Plot.plotData () является статическим методом, я могу вызывать его в любое время, когда захочу.Но не так.Я должен ждать, пока Plot будет создан с помощью Intent () и startActivity.В противном случае метод onCreate () в Plot не был вызван, а в Plot нет указателей.

Как решить эту проблему.Добавить статический метод получения / установки, который изначально равен false, пока не будет запущен onCreate?

1 Ответ

7 голосов
/ 09 июня 2011

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

Не будет, если вы не положите его в Service.Не просачивайте нити из Activity, пожалуйста.

Обратите внимание, что вам уже сообщили об этом.

Мы можем обратиться к методу построениякак статический метод с именем Plot.plotData ();

Это не должен быть статический метод, как Я уже говорил вам .

Myпроблема в том, что я не могу сказать, когда активность Plot активна, поэтому я не могу сказать, когда начинать вызывать Plot.data ().

Именно поэтому действие Plot должно отвечать за собственный рисунок.Ваш фоновый поток в вашем Service должен исключительно обрабатывать сбор данных.Вы можете организовать передачу данных из Service в Plot через Messenger, или через bindService() и обратный вызов, или другими способами.

Проектирование службы, выполняющейСбор данных и действия, отображающие результаты, широко распространены в Android.Почтовые клиенты используют сервисы для сбора новых почтовых сообщений.Читатели каналов используют службы для сбора последних обновлений каналов.И так далее.Вы просто собираете информацию через Bluetooth, тогда как большинство примеров этой концепции собирают информацию через Интернет.

Итак, подведем итог: переместите логику сбора данных Bluetooth в Service, используяфоновый поток (или темы, множественное число, если необходимо).Организуйте для Service доставку данных в действие Plot по мере их поступления.Пусть действие Plot отобразит результаты.

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