|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
Передать ссылку на класс через Intent03.01.2016, 11:54. Показов 4884. Ответов 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 нажатие кнопки в другом активити Как в порождаемый класс передать ссылку на основной класс? Передать ссылку в класс? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|