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

Как правильно создавать объекты ? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как правильно создавать объекты ? http://www.cyberforum.ru/android-dev/thread959979.html
Как правильно создавать объекты и как они расходуют память, что является правильным подходом? public class MyClass extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
Программирование Android Как сделать так, чтобы при выходе из программы она продолжала работать? (не вирус) Пишу программу под Андроид. как сделать так, чтобы при выходе из программы она продолжала работать?, пример - будильник. http://www.cyberforum.ru/android-dev/thread959936.html
Удаленное подключение к серверу через http Программирование Android
Не как не могу найти информацию о том, как сделать что бы приложение обращалась к серверу по заданному http адресу и что бы все данные сохраняла в локальную БД(sqlite). Помогите, хотя бы с источником информации?! Программирую в Eclipse.
Программирование Android Сохранение arraylist<class> в памяти устройства
Добрый день! Подскажите, как привильно сохрянать список с классами? Как я понимаю надо смотреть в сторону SQLite? Допустим класс книга, который имеет имя, описание и номер. Как я понимаю можно создать базу данных в приложении. Но что если класс содержит в себе еще список классов, который так же содежит еще один список. Не получится ли слишком награможденно и скажется ли это на производительности?...
Программирование Android Как получить доступ к сервису? http://www.cyberforum.ru/android-dev/thread959698.html
У меня в приложении есть сервис, который запускается вместе с приложением. Также я создал класс, который наследуется от BroadcastReceiver для мониторинга интернет подключения. Из метода onReceive(Context context, Intent intent) этого класс я хочу вызвать метод onConnectionStatusChange(boolean isConnected) своего сервиса, но никак не могу придумать как к нему обратиться... У кого нибудь есть...
Программирование Android Где программа хранит свою БД? Android 4.1.1 Программа работает с sqlite. Установил на внешнюю карту памяти и загрузил в данные в БД. Но я не могу найти саму БД. В эмуляторе база хранится в \data\data\_ИМЯ_ПАКЕТА_\databases\ Но на устройстве папка data пустая. Где же база? подробнее

Показать сообщение отдельно
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.09.2013, 02:00     Как правильно создавать объекты ?
Цитата Сообщение от haribo Посмотреть сообщение
"сделать филдчекер полем класса является потоконебезопасным решением"
сделайте полем класса User, и данная проблема потокобезопасности решится, хоть мы все равно используем поле класса)
если в синглтоне есть поле name, то подразумевается что это общее поле для всех а не персональное поле для отдельного пользователя, это уже особенность синглтона как и статик полей, здесь проблема скорее не в потоках, а в неправильном использование синглтона, здесь даже при одном потоке напечатает "Вася", вы ведь описали последовательные действия а не параллельные - сначала записали "Вася", потом Петя напечатал "Вася", здесь количество потоков ни на что не влияет, если в одном потоке выполните те же действия в той же последовательности - получите тот же результат, здесь проблема общих ресурсов а не потоков.

вот вам реальный пример потоконебезопасности:
есть у нас несколько потоков и каждый выполняет такие действие: прочитать значение -> увеличить на 1 -> записать значение
так вот, если все потоке считаю значение одновременно, то в итоге значение увеличится только на 1, сколько потоков бы не было.
и в таком случае, метод который делает чтение -> увеличение -> записать и класс в котором он описан называют потоконебезопасным а не ресурс в который записывается это значение.
вот для таких проблема и придумали синхронизации/транзакции/атомарные операции чтобы сделать их потокобезопасными.
а вот в вашем примере про потоки ни слова, только про общие ресурсы)

вот, почитайте на досуге
http://blogs.msdn.com/b/ruericlipper...9/9929760.aspx

Добавлено через 26 минут
в общем, если уж говорить про объекты, то для меня объект потоконебезопасный если во время выполнения его метода другой поток может изменить его внутреннее состояние так, что метод выполнится некорректно.
объект "Вася" не изменился(name - ссылка на объект ), так как String immutable, изменился именно объект контроллера, именно внутреннее состояние контроллера, что и привело к ошибке, и это значит что именно контролер потоконебезопасный.
name это лишь указатель, а методы объекта "Вася" будут выполнятся одинаково вне зависимости от того где вы его инициализируете или является ли name полем класса.

Добавлено через 7 минут
ну в общем, это скорее был пример неправильного использования синглтонов / статик полей.

Добавлено через 13 минут
Цитата Сообщение от V0v1k Посмотреть сообщение
термин "потокобезопасный" применяется к классу или коду, а не к объекту.
точнее хотел написать "а не к переменной"
обычно просто говорят "класс A потокобезопасен, а класс B потоконебезопасен", а является ли переменная этого класса полем другого класса или локальной переменной не имеет значения для него, сам этот факт никак не влияет на выполнение его методов. так вот, в вашем случае String так и остался потокобезопасным, хоть он и поле класса, а вот ваш контроллер потоконебезопасный.

Добавлено через 9 минут
а если по теме, то обычно инициализирую объекты в onCreate, а точнее в методах init*** которые в свою очередь вызываются в методе onCreate.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru