Почему так громоздко передавать список объектов из одной активности в другую деятельность

Мне было интересно, почему Google делает так сложно передать список объектов вокруг, от одного действия до другого, хотя мои действия все в одном процессе?

  • http://androidideasblog.blogspot.com/2010/02/passing-list-of-objects-between.html
  • Помощь с передачей ArrayList и разумная активность
  • http://developer.android.com/resources/faq/framework.html#3

Почему они не могут просто что-то вроде

intent.putExtra("histories", listOfHistoryObjects); 

Они чрезмерно оформлены?

Solutions Collecting From Web of "Почему так громоздко передавать список объектов из одной активности в другую деятельность"

Одна причина:

  1. Действие A начинает действие B, обрабатывая его аргументом, который является прямым указателем на объект.
  2. Пользователь нажимает на дом.
  3. Ваш процесс убит в фоновом режиме.
  4. Пользователь возвращается в ваше приложение.
  5. Действие B теперь воссоздается.
  6. Ooops, аргумент объекта, который должен был работать, больше не существует.

Еще одна причина:

Деятельность – это компоненты верхнего уровня, представляющие основные части вашего приложения. Платформа управляет ими для вас через процессы; Независимо от того, работают ли операции А и В в одном и том же процессе, все, что вы предоставляете startActivity (), должно проходить через IPC в системный процесс, а системный процесс поддерживает состояние этого действия и передает его обратно в ваш процесс, когда активность B Должен быть создан. Он также поддерживает это при повторном запуске вашего процесса. Он не мог ничего сделать, если бы разрешал любой произвольный объект Java, который нельзя было переносить через границы IPC.

Если у вас есть элементы пользовательского интерфейса, которые тесно связаны, вы можете использовать фрагмент для реализации отдельных частей вашего пользовательского интерфейса. Этот класс не является частью верхнего уровня вашего приложения и не обеспечивает никакой поддержки для использования через процессы, поэтому упрощает непосредственное взаимодействие фрагментов или фрагмента и его активности.

Тем не менее … это все еще не устраняет необходимость правильной работы в первом случае. Если вы не собираетесь использовать аргументы на основе Bundle для фрагментов (которые позволяют системе автоматически заботиться о сохранении этих данных через экземпляры процессов), вам нужно будет позаботиться о внедрении onSaveInstanceState и, чтобы правильно воссоздать ваши Фрагменты в соответствующем состоянии.

Также, пожалуйста , не используйте Serializable для хранения объектов в пакет или пакет. Как говорится в документации по адресу http://developer.android.com/reference/android/os/Parcel.html#writeSerializable(java.io.Serializable) , они чрезвычайно неэффективны по сравнению с реализацией Parcelable (или даже просто с использованием встроенных функций, В примитивах в Bundle).

Пока вы остаетесь в одиночном процессе, вы можете просто передавать объекты по ссылке, используя стандартные java-методы. НЕТ необходимости в намерениях, а однотонный контейнер отлично подходит для Android.

Я думаю, вам просто нужно реализовать интерфейс Serializable в вашем классе.

А после этого вы можете напрямую писать:

 intent.putExtra("histories", listOfHistoryObjects); 

Проверьте этот пример для подробного описания.