Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 64
#1

Singleton или класс с полями static? - Android

06.06.2016, 13:43. Просмотров 363. Ответов 13
Метки нет (Все метки)

Собственно вопрос в названии темы.

Задача в следующем, пишу приложение, и мне нужно некоторое количство глобальных переменных носящих более конфигурационный характер.

Можно создать класс и все эти переменные сделать статическими. Но тогда в главном классе нужно будет создать метод init(), чтобы их проинициализировать.

А можно применить паттерн одиночка и проинициализировать в конструкторе синглтона.

Как лучше поступить.

Первый способ отлично работае, а второй, вроде как смотрится получше...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Любопытный
117 / 117 / 21
Регистрация: 19.10.2012
Сообщений: 377
06.06.2016, 15:05     Singleton или класс с полями static? #2
Цитата Сообщение от BirviZ Посмотреть сообщение
Но тогда в главном классе нужно будет создать метод init(), чтобы их проинициализировать.
Статические блоки инициализации.
Значения полей могут изменяться в процессе работы приложения?
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 64
06.06.2016, 15:08  [ТС]     Singleton или класс с полями static? #3
Да, будут.
Значения при инициализации - это те, которые по дефолту, а в процессе работы будут меняться.
Любопытный
117 / 117 / 21
Регистрация: 19.10.2012
Сообщений: 377
06.06.2016, 15:18     Singleton или класс с полями static? #4
Не вижу смысла усложнять код реализацией синглтона, если непосредственной потребности в нем нет.
Вы можете все реализовать на основе статического класса, дефолтные параметры инициализировать в статическом
блоке инициализации, но следите за потокобезопасностью при конкурентном изменении состояния.
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 64
06.06.2016, 15:22  [ТС]     Singleton или класс с полями static? #5
Понятно.
Значит создам статический класс.
Пробовал реализовать синглтон, столкнулся с проблемй, что этот класс нужно еще наследовать от AppCompatActivity, так как нужем метод getViewById()....
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
07.06.2016, 09:01     Singleton или класс с полями static? #6
BirviZ, тут по ситуации. Можно и singleton, желательно, потокобезопасный. Инициализировать класс в Application-классе. Внутри singleton'а сделать метод getInstance. Также сделать конструктор с инициализацией переменных.
Про getViewById не понял. Эти параметры можно передавать в конструктор. Зачем это должно быть как-то связано с активностью?
Паблито
2017 / 1759 / 548
Регистрация: 12.05.2014
Сообщений: 6,240
Завершенные тесты: 1
07.06.2016, 09:42     Singleton или класс с полями static? #7
Цитата Сообщение от BirviZ Посмотреть сообщение
некоторое количство глобальных переменных носящих более конфигурационный характер
можно сделать через SharedPerferences, статические поля (а не статический класс), через наследника Application, БД, content provider и т.д.

а вообще задача описана не полностью и без конкретики
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 64
08.06.2016, 11:50  [ТС]     Singleton или класс с полями static? #8
Собственно класс который я хотел реализовать как синглтон
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.birviz.vapecalculator;
 
import android.widget.EditText;
import android.widget.TextView;
 
public class Values {
    /* defalt values */
    static int liquidTotal = 10;
    static int nicotineBase = 36;
    static int nicotineTotal = 6;
    static int pg = 55;
    static int vg = 35;
    static int water = 10;
    static int aroma = 5;
    static int dropsInMilliliter = 20;
 
    /* define fields */
    static EditText liquidTotalEditText;
    static EditText nicotineBaseEditText;
    static EditText nicotineTotalEditText;
    static EditText pgEditText;
    static EditText vgEditText;
    static EditText waterEditText;
    static EditText aromaEditText;
    static EditText dropsInMilliliterEditText;
 
    static TextView outputDisplay;
}
Нужно что бы эти переменные существовали в одном экземпляре и имели доступ из любого класса приложения. (В данном случае из одного пакета. Мое приложение врядли выйдет за рамки одного пакета))
Паблито
2017 / 1759 / 548
Регистрация: 12.05.2014
Сообщений: 6,240
Завершенные тесты: 1
08.06.2016, 14:18     Singleton или класс с полями static? #9
Цитата Сообщение от BirviZ Посмотреть сообщение
Java
1
static EditText liquidTotalEditText; static EditText nicotineBaseEditText; static EditText nicotineTotalEditText; static EditText pgEditText; static EditText vgEditText; static EditText waterEditText; static EditText aromaEditText; static EditText dropsInMilliliterEditText; static TextView outputDisplay;
вот так делать точно не стоит
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 64
08.06.2016, 14:19  [ТС]     Singleton или класс с полями static? #10
Почему?
И как лучше?
Паблито
2017 / 1759 / 548
Регистрация: 12.05.2014
Сообщений: 6,240
Завершенные тесты: 1
08.06.2016, 14:24     Singleton или класс с полями static? #11
Цитата Сообщение от BirviZ Посмотреть сообщение
Почему?
потому
Цитата Сообщение от BirviZ Посмотреть сообщение
И как лучше?
все эти текстовые поля, edittext-ы обычно делаются приватными, никто не делает их public
обычно такое происходит если архитектура приложения не очень
нужно сидеть и думать как сделать так что бы приложению не хотелось брать кучу каких-то переменных из статических полей
ZeroHero
3 / 3 / 1
Регистрация: 24.05.2015
Сообщений: 67
10.06.2016, 10:59     Singleton или класс с полями static? #12
Java
1
2
3
4
5
6
7
8
static int liquidTotal = 10;
    static int nicotineBase = 36;
    static int nicotineTotal = 6;
    static int pg = 55;
    static int vg = 35;
    static int water = 10;
    static int aroma = 5;
    static int dropsInMilliliter = 20;
через SharedPreferences. А вьюхи прямо в классе активности.
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 64
10.06.2016, 12:15  [ТС]     Singleton или класс с полями static? #13
SharedPreferences не подойдет. Эти переменные будут менять значения.
Судя по всему оставлю переменные как есть, а вьюхи в класс активности перенесу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2016, 02:36     Singleton или класс с полями static?
Еще ссылки по теме:

Android Список с двумя полями
Можно ли не использовать singleton Android
Android Static MediaPlayer
BroadcastReceiver + static переменная Android
Android Как вызвать postInvalidate() из static метода?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ZeroHero
3 / 3 / 1
Регистрация: 24.05.2015
Сообщений: 67
11.06.2016, 02:36     Singleton или класс с полями static? #14
Так ты сделай класс PrefManager, в нем собери все коды твоих переменных. И при любом изменении вызывай метод PrefManager.putString(PrefManager.CODE_SPEED) PrefManager.getString(key) преф менеджер синглтон создавай при ицнициализации приложения. Я просто с девайса сижу. Был бы с компа скинул рабояий код. Если что, завтра могу так и сделать.
Yandex
Объявления
11.06.2016, 02:36     Singleton или класс с полями static?
Ответ Создать тему
Опции темы

Текущее время: 05:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru