У меня есть активность, которая уже становится довольно громоздкой, насколько это делает код (по крайней мере, по сравнению с тем, насколько тяжелы остальные классы), поэтому я надеялся создать простого помощника класс. Я хотел просто создать класс (например, SimpleSessionManager), который бы использовал для меня прослушивание событий местоположения и датчиков. Есть ли способ сделать это, используя простой класс через конструкторы, или есть способ запустить вспомогательный класс в качестве фоновой активности? Насколько я понимаю, я не могу реализовать слушателей событий через расширение класса Service. Это верно? Выполнение его как простой фоновой активности было бы идеальным, потому что тогда я мог бы использовать метод findViewById(), но я не могу понять, как это сделать с ответом слушателей, как я надеялся. Если класс Fragment будет работать, может кто-то указать мне в сторону родственного примера, как все, что я могу найти, я не могу заставить свою реализацию работать.Реализация нескольких прослушивателей событий в фоновом классе
ответ
Для служебных классов я бы пошел с singleton pattern. Например, вы можете настроить LocationController, который прослушивает обновления местоположения, и любая деятельность может просто спросить о синглете для последнего местоположения. Вот небольшой фрагмент кода, чтобы показать вам, что я имею в виду.
public class LocationController implements LocationListener {
private static LocationController defaultController;
public static LocationController getDefaultController(Context applicationContext) {
if(defaultController == null) {
defaultController = new LocationController();
LocationManager lm = applicationContext.getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30 * 1000, 1000, this);
}
return defaultController;
}
private Location lastLocation;
private LocationController() {
}
@Override
public void onLocationChanged(Location location) {
lastLocation = location
}
public Location getLastLocation() {
return lastLocation;
}
}
Используется в деятельности:
public void onCreate(Bundle SavedInstanceState) {
setContentView(R.layout.mylayout);
Location lastLocation = LocationController.getDefaultController(getApplicationContext()).getLastLocation();
}
Я просто использовал местоположение в качестве примера, но одиночки действительно хороши для вещей, которые вы могли бы доступ к из нескольких мероприятий в вашем приложении. Поскольку Android уже дает вам неплохую службу менеджера местоположений, я не могу использовать это в своем приложении, но это зависит от вас. Этот шаблон может использоваться для многих типов слушателей и моделей данных. Следует иметь в виду использование контекста приложения вместо контекста активности. Вы не хотите использовать контекст активности для таких вещей, так как это приведет к утечке активности и поеданию памяти.
Еще одна вещь, касающаяся этого шаблона - помнить о том, чтобы отключить обновления местоположения. Это будет продолжать получать обновления местоположения, пока Android не удалит ваше приложение из памяти. Это означает, что даже если ваше приложение может быть неактивным и, следовательно, не заботится о обновлениях местоположения, оно все равно будет запрашивать обновления каждые 30 секунд. Это очень плохой пользовательский интерфейс, так как он очень быстро убьет их аккумулятор.
Мне обязательно нужно будет изучить это. Спасибо. Является ли метод контроллера по умолчанию тем, что в значительной степени делает его одиночным? – zgc7009
Это и потому, что существует только один отдельный конструктор. – Bobbake4
Gotcha, раньше смотрел на него на моем телефоне, и мне было трудно его увидеть. – zgc7009
- 1. Синтаксис нескольких прослушивателей событий в Emblem JS?
- 2. Динамическое добавление нескольких прослушивателей событий в JavaScript
- 3. Реализация событий в базовом классе
- 4. jQuery: Создание нескольких прослушивателей событий одновременно?
- 5. Добавление нескольких прослушивателей событий к одной ссылке
- 6. Создание нескольких прослушивателей событий с использованием цикла
- 7. Удаление прослушивателей событий
- 8. Динамическое добавление прослушивателей событий
- 9. динамически добавлять прослушивателей событий
- 10. Рекомендации по размещению прослушивателей событий
- 11. Настройка пользовательских прослушивателей событий
- 12. Ждите прослушивателей событий в цикле?
- 13. Понимание прослушивателей событий в java
- 14. Добавление нескольких прослушивателей событий в javascript для элемента
- 15. Несколько прослушивателей событий (с SSCCE)
- 16. Прослушивание прослушивателей событий внутри прослушивателя событий перехода?
- 17. Реализация нескольких итераторы в одном классе
- 18. Добавление прослушивателей событий без переопределения
- 19. Несколько прослушивателей событий без петель
- 20. Дождитесь завершения всех прослушивателей событий
- 21. Javascript - несколько пользовательских прослушивателей событий
- 22. Несколько прослушивателей событий для класса
- 23. Удаление прослушивателей событий на автоматически созданных нескольких элементах
- 24. Использование нескольких прослушивателей трассировки
- 25. Регистрация нескольких прослушивателей событий, хотя я использую removeEventListener
- 26. Promise.all() - Сделать что-то после запуска нескольких прослушивателей событий
- 27. Вызвать код после всех прослушивателей событий мыши.
- 28. Зарегистрировать прослушивателей событий в веб-работнике
- 29. Удаление всех прослушивателей событий в Flex
- 30. Как определяется порядок прослушивателей событий в javascript?
Вы знакомы с концепцией анонимных и внутренних классов? – chrylis
В этом случае я чувствую, что внутренний класс не достигнет цели сохранения каждого отдельного файла класса, сжатого, а также позволяя использовать код во многих классах (может быть, и не так). Не заглядывали в анонимные. Есть ли у вас какие-то ссылки на документацию о том, как это может относиться к этому? Спасибо за ответ – zgc7009
Анонимные классы - это те, в которых вы не указываете имя класса, вы просто вставляете его и назначаете переменную. Если вы хотите объявить обработчиков, которые могут использоваться из нескольких разных классов, просто напишите каждый обработчик как свой собственный класс верхнего уровня, реализующий соответствующий интерфейс. Возможно, было бы полезно разместить их в пакете «event». – chrylis