|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
Передать ссылку на класс через Intent03.01.2016, 11:54. Показов 4817. Ответов 16
Метки нет (Все метки)
Возможно ли подобное?
Есть класс, в котором храню больше 50 параметров разного типа (количество переменных все еще растет). Эти параметры нужно в одном активити рассчитать, а в другом вывести (вернее расчитать в 2х активити, а вывести выборочно в 3 другие). Храню его в сервисе. Сервис надежно сидит в памяти! Можно ли передавать при вызове ссылку на сам класс или на сервис? Как-то глупо передавать все параметры через именные строковые поля в Intent. И расширяемость падает на порядок. Раньше получалось хранить класс в Application, но для сервиса (созданого автозагрузкой) и для главного активити похоже создаются два класса Application.
0
|
|
| 03.01.2016, 11:54 | |
|
Ответы с готовыми решениями:
16
Как передать ссылку через Intent Передать через intent VIEW Передать через Intent информацию об Item |
|
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
|
|
| 03.01.2016, 12:46 | |
|
1. Создайте свой класс где бы вы хранили все свои параметры. Далее этот класс сериализуйте и передавайте его через Intent. О том как сериализировать в интернете куча информации. (На худой конец можете Json воспользоватся).
2. Создайте класс где все параметры статика. Это даст вам возможность из любого места программы изменять/читать данные.
0
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||
| 03.01.2016, 13:46 [ТС] | ||
|
А вы предлагаете разложить класс на длинную (практически) XML строку и рассылать последнюю версию каждой активити при каждом требовании обновиться... И целый протокол написать для общения 5ти окон между собой перекидывая практически один и тот-же класс! Примерно задача такая: система получает внешний сигнал с датчика (например приближение к точке GPS). она начинает собирать в потоке кучу инфы про точку и делает анализ этой инфы (накопление класса списками) она спрашивает кое-что для подтверждения у пользователя (показав часть уже собранной инфы) она показывает "флайку" с инфой (неубираемое окошко над остальными). после окончания работы она вызывает еще одно окошко (уже "диалог") с этой-же инфой (и набором кнопок) после надо сервисом (в потоке) еще раз обработать этот класс и записать нужное в базу. ...как видите КУЧА инфы должна отобразиться КУЧУ раз в разных форматах! Анализ ДОЛГИЙ! Часть идет обращением к удаленному серверу! Добился того что и активити и диалог и флайка вызываются из сервиса. Там-же храню класс. Там-же его накапливаю. Пока что успешно передаю данные интент-ом, но для тестов использую всего 3 параметра! А должны быть больше 10 параметров и 4-5 "многостолбцовых" списков. Передавать каждый раз "раскладывая в jason, а потом "парся" - это бред! Там до нескольких мегабайт может быть! И каждый раз память выделять? Подумываю хранить класс в Application и проверять та ли это версия Application перед выводом - могут быть ошибки! Или научиться передавать ссылку на сервис в активити через Application. Во флайки успешно передал, но не в активити... В С++ я мог класс либо предавать ссылкой (хоть между разными программами/dll) либо быстро копировать между программами (просто N байт памяти передавалось в другую программу сверхбыстрыми командами ОС вместе со знанием структуры класса).
0
|
||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 03.01.2016, 15:10 | |
|
врятли меня кто-то послушает, но https://github.com/greenrobot/EventBus
мегакульная вещь
2
|
|
|
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
|
|
| 03.01.2016, 15:57 | |
|
В Java все кастомные классы передаются по ссылкам. В чем проблема тогда?
0
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||
| 03.01.2016, 16:00 [ТС] | ||
![]() Но можете в 2х словах описать, что это??? похоже что это как раз позволят передавать класс, но КАК? Вы это использовали? Удобно (по коду)? Какие МИНУСЫ у этой технологии??? (плюсы не плохо расписаны в "рекламе"/описании) На сегодня я уже почти выкрутился!!!! Класс в сервис из которого все активити, диалоги, флайки вызываются. Ссылку на сервис в апликэйшт добавляю при создании сервиса. все активитивити получают доступ через myapplication.myservice.myclass Но я понимаю что это "частный случай" и все еще есть шанс что будет глючить (путать из какого экземляра апликейшн тянуть данные... созданного main_activity или сервисом... А если сервис первый раз запускается из main_activity, а потом закрывается свайпом) Подобная НАДЕЖНАЯ технология мне очень нужна для моего следующего запланированного проекта!
0
|
||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 03.01.2016, 16:09 | |
Сообщение было отмечено Tester64 как решение
Решение
Это пипец просто как удобно. Я до сих пор под впечатлением.
Честно говоря мое объяснение будет очень корявым, лучше прочитать тут Грубо говоря это шина, в которую можно ложить любые сообщения. Вообще любые, свои классы например. Я серьезно. Просто потратте время на медитацию на эту библиотеку. Я когда постиг суть ее работы - у меня случилась легкая истерика, я ходил по дому и повторял - да нуна, не может быть настолько все просто и удобно. Просто регистрируем нужные нам классы на прием нужных только этому классу ивентов. Фишка в различных сигнатурах методов onEvent(). У меня в одном парсере стало строк раз в 10 меньше, код стал на порядок понятнее и красивее. Часть классов улетела в топку.
2
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
| 03.01.2016, 16:16 [ТС] | |
|
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||||||
| 03.01.2016, 16:27 | ||||||
|
и я наконец прочитал что надо передавать между активити
Многие боятся Parcelable, а складывать все нужные поля в бандл - гиморно. Есть минимум два решения. 1. Ставим плагин "Android Parcelable code generator". Его можно найти в плагинах в самой студии. После рестарта IDE открываем наш класс и прямо в коде нажимаем Alt+Insert В контекстном менб выбираем пункт Parcelable и плагин сам сгенерирует все нужные методы. 2. Подключить всем известную либу
одной строкой, которую сохранять в бандл и передавать через интенттак же одной строкой потом можно строку перегонять в объект своего класса
0
|
||||||
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||
| 04.01.2016, 01:22 [ТС] | ||
мне надо не сам класс передавать! А ССЫЛКУ на него! Он ОГРОМНЫЙ! В памяти хранит кучу таблиц(арреев), кучу строк, кучу простых переменных... Расчеты по точке, статистику, ближних "соседей" и многое другое... Пока что класс (при почти пустой базе) уже содержит больше 10 записей в таблицах. А возможно будут и тысячи... По ним проводятся сложные расчет в потоке. Сводятся цифры, подготавливаются данные для сложного отчета... Процесс долгий. Может думать больше минуты. А показывать результаты расчетов в 3х активити! Записывать во временную таблицу базы - не логично и тяжело. Расчитывать 3 раза тем более не логично... И в результате можно получить многомегабайтный класс в памяти! Не правильно как-то его передавать между активити КОПИРУЯ его! Нужно именно ссылку передать!Пока получается (описал выше метод). Пока надежно. Копий класса не делает. Конструктор лишь 1 раз вызывается! Но за ваш метод тоже спасибо... почитаю... посмотрю что он может...
0
|
||
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|
| 04.01.2016, 01:33 | |
|
Tester64, а почему бы тогда не использовать обычный синглтон?
1
|
|
| 06.01.2016, 09:30 | |
|
дико извиняюсь, что вмешиваюсь в глубокоинтеллектуальную беседу уважаемых донов, но что будет с "принимающей" активити, если программу прервут на телефонный звонок (например), а потом вернутся обратно?
активити будет пересоздана, и свои входные параметры она получит. а все что было создано где-то там когда-то и по ссылке - будет уже в лучших мирах gc. :-)
0
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||
| 06.01.2016, 17:35 [ТС] | ||
|
А во вторых активити будет аккуратно "свернуто" и убьется лишь при нехватке памяти на телефон. Чаще всего мои активити даже не сворачиваются, а просто "накрываются" звонилкой. В моем-же случае активити вызваются из сервиса. Поэтому они тесно связаны с сервисом и могут хранить там свои классы "статично" p.s. проверял свою систему на звонках! ничего не теряю!!!
0
|
||
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|
| 06.01.2016, 23:10 | |
|
Tester64, bastrakov, Ну по идее сервис все таки может умереть (оочень маловероятно, конечно). Единственное, что гарантированно не убьется системой - это то, что сейчас на экране. Ну и еще недавно тестировал всякие нестандартные ситуации - все данные, которые переданы интентом куда-то сохраняются (может в кеш какой), из памяти удаляется, но при повторном запуске активити(из последних приложений) все данные, которые я посылаю интентом, восстанавливаются, даже тяжелые - специально до 2-3 мб раздувал строки для тестов. Так что считаю самым надежным способом передачи все таки интент, но оно конечнчо очень медленно. По идее еще все на что есть ссылка в активити будет выгружено только вместе с активити, так что и синглтон не плохо должен подойти, да и в реализации проще. Но тут от конкретной задачи зависит, может и не подойдет в данном случае.
0
|
|
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||
| 07.01.2016, 07:45 [ТС] | ||
|
У сервисов есть возможность сделать его "не убиваемым". Рассказывать долго(много кода), но в 2х словах - его можно привязать к нотифу! Можно повысить приоритет. Можно из него показать "флайку", возможно даже полупрозрачную (почти не видимую). Хочу написать напоминалку, которая работает по таймеру! А не через алармы! (очень сложная математика) Поэтому 2 года искал как сервисы сделать надежными и привязать к таймеру... вроде получилось... уже больше года тестирую в разных проектах - не сдыхает. и % процессора в разумных пределах... Написал будильник, написал индикатор батарейки тонкой полоской внизу экрана... полоска 3й месяц живет... будильник уже пол года КАЖДЫЙ день срабатывает...
0
|
||
|
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
|
|||||||||||||
| 07.01.2016, 08:05 | |||||||||||||
Добавлено через 1 минуту
1
|
|||||||||||||
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||
| 07.01.2016, 08:25 [ТС] | ||
|
Мой аларм перезапускает сервис для надежности каждую 1-10 минут (управлемо), а внутри работает поток который дает точность хоть до 0.1 секунды... И главное ДИНАМИЧЕСКИ позволяет откладывать следующее срабатывание внутри потока. Например будильник через 8 часов... Откладываю на 7:59, а потом раз в 10 секунд проверяю... А когда 30 секунд останется, запускаю по секунде и за 3 секунды до 8:00 запускаю... монстр получился! ![]() Частота проверок и перезапусков влияет на нагрузку! но даже при 5 раз в секунду до 50% на одноядерном не доходил... Этот-же сервис отвечает за удержание одной или нескольких "флаек". В текущем проекте (где синглтон возможно пригодится) из него запускаю и диалоги. И во флайку из него пускаю таймер (прошло/осталось). Помню первые неубиваемые сервисы "почему-то" перезагружали мобилку каждые 1.5-3 часа! Пока не научился за нагрузкой проца следить...Про синглтон спасибо! Позднее попробую... сейчас текущий проект на стадии "лишь бы заработало"... А потом, когда за надежность и оптимизацю возмусь... попробую и Ваш вариант!
1
|
||
| 07.01.2016, 08:25 | |
|
Помогаю со студенческими работами здесь
17
Пытаюсь передать данные через Intent, но выходит ошибка
Как передать через intent нажатие кнопки в другом активити Как в порождаемый класс передать ссылку на основной класс? Передать ссылку в класс? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|