|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
Передать ссылку на класс через Intent03.01.2016, 11:54. Показов 4831. Ответов 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 нажатие кнопки в другом активити Как в порождаемый класс передать ссылку на основной класс? Передать ссылку в класс? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|