плюсы и минусы для реализации глобального объекта в Android / Java как singleton или DataClass - PullRequest
2 голосов
/ 26 ноября 2011

Существует много вопросов и ответов о том, как реализовать глобальную переменную в Android / Java.

Таким образом, кажется, что можно реализовать или одиночный класс, или использовать сам класс данных со статическими переменными.

Я собираюсь начать более крупный проект и хотел бы начать с правой ноги.

Я просто не уверен, какой из них использовать.

Pro singleton / con Класс данных

  • предположительно "чище" (но я действительно не знаю почему)
  • гарантирует, что действительно всегда есть только одинпредставление
  • создает новый экземпляр, если старый «очищается» (когда это может произойти?)

Con singleton / pro Класс данных

  • не рекомендуется некоторыми (но не нашел убедительных причин)
  • гарантирует, что существует только одно представление по дизайну
  • очень легко получить доступ, просто написав MyDataClass.x (для доступа к singleton требуется получитьсначала получить к нему доступ каким-либо образом)
  • нет необходимости передавать его в качестве параметра

Итак, в общем, я склонен использовать DataClass, но я не уверен, потому что я прочитал, что этопредположительно, не очень хороший стиль программирования.

Я хотел бы добавить

  • данные, которые должен содержать этот глобальный объект, довольно большие, более 30 тыс. строк / ключей.И это не должно быть очищено на любом этапе, чтобы, когда приложение возвращалось, оно могло зависать из-за этого - как я читал в других местах, например, Singletons vs. Application Context в Android? (3-й ответ)
  • это не веб-приложение, я использую только один загрузчик классов
  • это многопоточность, но на самом деле только один поток получает доступ к этим данным
  • можно, конечно, также использовать этот подход Какобъявлять глобальные переменные в Android? , но не проще ли использовать и обращаться к ObjectClass в этом случае?
  • И проверка этого http://developer.android.com/resources/faq/framework.html, esp в разделе "Постоянные объекты" подразумеваетчто в любом случае нет реального преимущества для того или другого в этих случаях.

Большое спасибо

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

Лучший способ реализовать синглтон - это использовать enum.

public enum Singleton
{
    INSTANCE;

    public void someMethod()
    {
        // your code here
    }
}

Для получения более подробной информации вы можете прочитать Effective Java (2nd Edition)

1 голос
/ 26 ноября 2011

Прежде всего: нет большой разницы между классом с открытыми статическими переменными-членами и одноэлементным классом. Многие разработчики предпочитают шаблон синглтона, потому что код выглядит более естественным и более Java. Например. Singleton.Data выглядит как постоянный доступ, а Singleton.getData() выглядит так, как будто вы получаете доступ к некоторым статическим данным.

Лично я использую статический шаблон приложения: см. Доступ к ресурсам без ссылки на действие или контекст

Вы можете использовать onCreate для настройки любых статических данных или даже других синглетонов. Например. Я предпочитаю настроить одноэлементную базу данных SQLite и обращаться к ней через App.getDb(). Вы можете использовать этот шаблон для доступа к контексту или ресурсам приложения.

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

...