Я парень C/C++, и я совсем новичок в Java и Android. Итак, я создаю экземпляр класса в действии «А» и пытаюсь использовать этот экземпляр в действии «Б». В C/C++ вы просто передадите адрес (указатель) экземпляра. Теперь я узнал, что с Android я должен использовать Parcel, но я не понимаю: зачем мне выполнять всю эту процедуру разделения/удаления, когда все, что я хочу сделать, это передать указатель? Пожалуйста, просветите меня!
Android: Почему посылка?
Ответы (3)
Это связано с моделью активности Android.
Поскольку ваше приложение может быть остановлено системой для восстановления оперативной памяти (это должно происходить только тогда, когда оно работает в фоновом режиме, если только система не находится в действительно плохой ситуации), ссылка на объект просто не годится. Это было бы совершенно бесполезно, когда ваш процесс умирает.
Намерение, которое вы используете для запуска действий, сохраняется диспетчером действий, чтобы его можно было использовать для воссоздания действия, когда пользователь возвращается к нему. Вот почему все данные в вашем намерении должны быть разделены.
Имейте в виду, что это означает, что ваши две активности будут иметь два одинаковых экземпляра, но, естественно, они не будут одним и тем же объектом, поэтому изменения в одном не будут отражаться в другом.
Parcel или parcalable — это эффективный и альтернативный способ сериализации объекта в Android. Это альтернатива сериализации в Java Core. Java Serialization API позволяет нам преобразовывать объект в поток, который мы можем отправить по сети или сохранить в виде файла или сохранить в БД для последующего использования. Это способ обмена объектами между отправителем и получателем (класс). Receiver, чем десериализует этот объект. В Android посылки используются для обмена объектами между различными действиями с помощью намерений.
java не работает как c/c++, вы не работаете напрямую с памятью. Если вы хотите передать объект из A в B, вы должны установить его в Bundle и добавить этот пакет в намерение. если это пользовательский класс, давайте назовем его C, C должен реализовать возможность разделения. Java работает по значению, а не по ссылке.
как передавать данные между действиями?