2013-06-21 4 views
1

Я передаю объект Serializable, используя Intent из Activity A в Activity B, но когда я печатаю метод object.toString(), прежде чем помещать объект в намерение в A и после извлечения он в B, я вижу, что они на самом деле разные экземпляры.Android намерение создать новый экземпляр объекта

В этом проблема. У меня есть поля этого объекта, инициализированные в другом классе и другом потоке, и к тому времени, когда я поместил объект в намерение в Activity A, эти поля еще не готовы, но к тому времени, когда я их извлечу, они будут готовы. Однако, когда я попытался получить эти поля в Activity B, я увидел, что они пусты, потому что извлеченный объект был новым экземпляром.

Как решить эту проблему? Я не знаю, как заставить основной поток ждать завершения задачи инициализации объекта (уже попробовал thread.join()). Мне просто нужно отправить два ArrayLists из одной активности в другую, за исключением случаев, когда я отправляю их (т. Е. Помещая их в намерение), они пусты, но к тому времени, когда они будут восстановлены, они уже заполнены.

+0

было бы лучше, если бы вы могли опубликовать код. – MDMalik

ответ

0

При сериализации объекта он преобразуется в форму, которая впоследствии может быть использована для создания семантически идентичного клона исходного объекта. Разумеется, это будет другой экземпляр исходного объекта.

Есть два сценария, я мог думать:

  • Ваша активность B могут работать, не имея информации, которую вы пытаетесь отправить через Intent. В этом случае Activity B может зарегистрировать BroadcastReceiver, и ваш поток, после завершения, будет транслировать данные через LocalBroadcastManager
  • Ваша деятельность B не может работать без этих данных, а Activity A запускает код, который генерирует эти данные, например. в AsyncTask и начинает действие B после завершения задачи (что было бы в методе onPostExecute()).