Android-объекты деятельности могут быть уничтожены и восстановлены. Таким образом, вам нужно будет использовать другой подход для поиска их - или любого объекта, который они создают !!! - вверх То есть вы можете передать как ссылку на статический класс, но тогда дескриптор объекта (Java вызывает эти «ссылки», как и SmallTalk; но они не являются ссылками в смысле C или сборки), возможно, будет позже недействительным, потому что «функция» Android OE - это любая Деятельность, которую можно уничтожить и восстановить позже.
Первоначальный вопрос: «Как передать объект из одного действия в другое в Android», и никто не ответил на это. Конечно, вы можете сериализовать (Serializable, Parcelable, в / из JSON) и передать копию данных объекта, и новый объект, имеющий те же данные, может быть создан; но он НЕ будет иметь одинаковые ссылки / дескрипторы. Также многие другие упоминали, что вы можете хранить ссылку в статическом хранилище. И это будет работать, если Android не решит удалить вашу активность.
Итак, чтобы действительно решить исходный вопрос, вам понадобится статический поиск, и каждый объект обновит свою ссылку, когда / если он будет создан заново. Например. каждое действие Android будет самоотверженным, если вызывается его onCreate. Вы также можете увидеть, как некоторые люди используют список задач для поиска действия по имени. (система временно уничтожает этот экземпляр действия, чтобы сэкономить место. getRunningTasks, список задач - это фактически специализированный список самого последнего экземпляра объекта каждого действия).
Для справки:
Остановлено:
«Действие полностью скрыто другим действием (действие теперь находится в« фоне »). Остановленное действие также все еще живо ( Объект действия сохраняется в памяти , он сохраняет всю информацию о состоянии и членах). , но не прикреплен к диспетчеру окон.) Однако он больше не виден пользователю и может быть уничтожен системой, когда требуется память в другом месте. "
OnDestroy
«Система временно уничтожает этот экземпляр действия для экономии места.»
Итак, шина сообщений является работоспособным решением. Это в основном "каламбуры". Вместо того, чтобы пытаться иметь ссылки на объекты; затем вы перепроектируете свой дизайн, чтобы использовать MessagePassing вместо SequentialCode. Экспоненциально сложнее отлаживать; но это позволяет вам игнорировать такого рода понимание операционной среды. Фактически, каждый метод доступа к объекту инвертируется, поэтому вызывающая сторона публикует сообщение, а сам объект определяет обработчик для этого сообщения. Много кода, но он может быть устойчивым с ограничениями Android OE.
Если все, что вам нужно, это верхняя активность (типичная вещь в приложениях для Android из-за повсеместного «контекста»), тогда вы можете просто указывать каждую активность как «верхнюю» в статическом глобальном пространстве всякий раз, когда вызывается его onResume , Тогда ваш AlertDialog или любой другой, которому нужен контекст, может просто взять его оттуда. Кроме того, немного неприятно использовать глобальный код, но он может упростить передачу контекста вверх и вниз повсюду, и, конечно, когда вы используете MessageBus, тогда он в любом случае глобален.