2013-09-24 4 views
0

У меня есть активность, которая уже становится довольно громоздкой, насколько это делает код (по крайней мере, по сравнению с тем, насколько тяжелы остальные классы), поэтому я надеялся создать простого помощника класс. Я хотел просто создать класс (например, SimpleSessionManager), который бы использовал для меня прослушивание событий местоположения и датчиков. Есть ли способ сделать это, используя простой класс через конструкторы, или есть способ запустить вспомогательный класс в качестве фоновой активности? Насколько я понимаю, я не могу реализовать слушателей событий через расширение класса Service. Это верно? Выполнение его как простой фоновой активности было бы идеальным, потому что тогда я мог бы использовать метод findViewById(), но я не могу понять, как это сделать с ответом слушателей, как я надеялся. Если класс Fragment будет работать, может кто-то указать мне в сторону родственного примера, как все, что я могу найти, я не могу заставить свою реализацию работать.Реализация нескольких прослушивателей событий в фоновом классе

+0

Вы знакомы с концепцией анонимных и внутренних классов? – chrylis

+0

В этом случае я чувствую, что внутренний класс не достигнет цели сохранения каждого отдельного файла класса, сжатого, а также позволяя использовать код во многих классах (может быть, и не так). Не заглядывали в анонимные. Есть ли у вас какие-то ссылки на документацию о том, как это может относиться к этому? Спасибо за ответ – zgc7009

+0

Анонимные классы - это те, в которых вы не указываете имя класса, вы просто вставляете его и назначаете переменную. Если вы хотите объявить обработчиков, которые могут использоваться из нескольких разных классов, просто напишите каждый обработчик как свой собственный класс верхнего уровня, реализующий соответствующий интерфейс. Возможно, было бы полезно разместить их в пакете «event». – chrylis

ответ

0

Для служебных классов я бы пошел с 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 секунд. Это очень плохой пользовательский интерфейс, так как он очень быстро убьет их аккумулятор.

+0

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

+0

Это и потому, что существует только один отдельный конструктор. – Bobbake4

+0

Gotcha, раньше смотрел на него на моем телефоне, и мне было трудно его увидеть. – zgc7009

Смежные вопросы