Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
#1

Кто как передаёт коллекции между активностями, классами?

09.02.2016, 14:55. Просмотров 737. Ответов 16
Метки нет (Все метки)

Всем привет!
Поделитесь опытом. Допустим, в одном классе вы накапливаете данные (ArrayList), в другой передаёте. Там можете вывести в ListView, добавить новые данные или провести какие-то манипуляции. Может быть, использовать их где-то ещё. Данные между активностями можно передавать, например, через Intent и startActivity. Можно хранить в другом классе (который становится singleton'ом) и брать оттуда. Можно использовать EventBus.
Кто как делает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2016, 14:55
Ответы с готовыми решениями:

Переход между активностями!
не могу перейти между активностями! вот весь лог 12-27 14:32:51.611:...

Передача данных между активностями
к примеру есть 2 активности первая public class first_act extends Activity {...

Передача значений между активностями
Добрый день. Как можно передавать значения переменных между активностями? У...

Затруднение с переключением между активностями
Чтобы лучше понимать решил написать приложение расписания пар в университете и...

MediaPlayer, рывок перезапуска музыки при переходе между активностями
Всем привет, есть приложение с несколькими активностями и при переходе между...

16
chizz
983 / 501 / 101
Регистрация: 19.03.2013
Сообщений: 3,106
Записей в блоге: 19
Завершенные тесты: 1
09.02.2016, 15:02 #2
В основном через Intent, пару раз еще с Parsel
1
DemD10
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 467
09.02.2016, 16:33 #3
SharedPreferences. Я иногда использую кастомный который работает по такому же принципу.
1
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.02.2016, 16:40  [ТС] #4
DemD10, кстати, да, у меня в одной из программ тоже есть такой способ. Правда, не знаю, насколько он быстр. Зато помогает не потерять данные, если что.
0
_Night_Scream_
78 / 76 / 10
Регистрация: 08.08.2013
Сообщений: 630
09.02.2016, 16:49 #5
Объекты в ArrayList implements Parcelable, через intent.
1
DemD10
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 467
09.02.2016, 17:00 #6
CoolMind, ну а чем он не быстр если это простые формы данных.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.02.2016, 17:25  [ТС] #7
DemD10, SharedPreferences? Насколько я помню, предполагается запись в соответствующий файл, что медленнее, чем просто передача в памяти. Но способ хороший, когда надо хранить всевозможные промежуточные состояния.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
09.02.2016, 17:53 #8
CoolMind, самый лучший способ передавать именно массивы данных - через интент. Т.к. когда данных много sharedPreferences будет тормозить (будет заметно при запуске новой активити). Еще плюс ко всему этому, все что было передано в интенте будет сохранено даже после выгрузки приложения из памяти (не видел где это описано, узнал с помощью тыка). Ну а если данных прям вообще ооочень много и нужно их хранить долго - лучше в бд, т.к. работает намного быстрее sharedPreferences и возможностей больше.
1
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.02.2016, 18:23  [ТС] #9
Spelcrawler, да, про БД согласен. Хотел у вас спросить,
Цитата Сообщение от Spelcrawler Посмотреть сообщение
все что было передано в интенте будет сохранено даже после выгрузки приложения из памяти
относится ко всему приложению или выгрузке одной активности?
Мне раньше казалось, что так в Андроиде действуют только статические переменные.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
09.02.2016, 18:26 #10
Цитата Сообщение от CoolMind Посмотреть сообщение
относится ко всему приложению или выгрузке одной активности?
Я тестировал через студию, там слева от logcat есть панель инструментов (там где скриншот можно сделать) в этой панели есть красный крестик - он убивает приложение насовсем, так же как система при нехватке ресурсов. При таком завершении все данные, которые были в интенте последней запущенной активити, сохранялись. Другие ситуации не тестил, но конечно, если руками закрыть или перезагрузить устройство уже ничего не сохранится, а запустится новый инстанс приложения.
1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
09.02.2016, 18:48 #11
Serializable
1
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
09.02.2016, 19:13  [ТС] #12
YuraAAA, не так давно читал, что Serializable имеет преимущество по скорости перед Parcelable, если прописывается вручную (с созданием соответствующих классов). Вы тоже так считаете?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
10.02.2016, 08:07 #13
Выгрузка приложения из памяти не означает очистку кэша, имхо. Возможно поэтому данные интента и сохраняются.
1
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
10.02.2016, 11:53 #14
CoolMind, а что значит с созданием соответствующих классов?
Parcelable будет быстрее, чем Serializable.
Но вот тут становится вопрос, сколько данных мы передаём. Если это объект, список из небольшого количества объектов, но зачем нам возня с Parcelable. А вот если количество объектов очень большое, то Parcelable будет ощутимо быстрее.

Тесты в миллисекундах
http://www.3pillarglobal.com/sites/default/files/parcelable.JPG
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
10.02.2016, 12:20  [ТС] #15
YuraAAA, сходу не нашёл ссылки, где я это прочитал. Конечно, почти 100% статей говорят о том, что Parcelable быстрее, и эта разница только увеличивается с объёмом данных. Ещё дома поищу.
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
12.02.2016, 00:24  [ТС] #16
YuraAAA, https://bitbucket.org/afrishman/androidserializationtest
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
06.05.2016, 14:21  [ТС] #17
YuraAAA, случайно нашёл оригинал ответа на SO, откуда взял ссылку выше:
http://stackoverflow.com/a/29331460/2914140. Правда, сам не тестировал, но тогда зацепило.
0
06.05.2016, 14:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2016, 14:21

Передача переменных между классами
Есть Main.java и Settings.java Settings.java содержит: public void...

Передача значений между классами
Как передать значение int-овой переменной из одного класса в другой? Всё было...

Передача слова между классами
В классе мэйнактивити я прописываю время, когда должно появиться всплывающее...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru