Android: Почему посылка?

Я парень C/C++, и я совсем новичок в Java и Android. Итак, я создаю экземпляр класса в действии «А» и пытаюсь использовать этот экземпляр в действии «Б». В C/C++ вы просто передадите адрес (указатель) экземпляра. Теперь я узнал, что с Android я должен использовать Parcel, но я не понимаю: зачем мне выполнять всю эту процедуру разделения/удаления, когда все, что я хочу сделать, это передать указатель? Пожалуйста, просветите меня!


person Kommissar Fahrner    schedule 21.08.2015    source источник
comment
Обратитесь к этой посылке developer.android.com/reference/android/os/Parcel. html   -  person Joy Helina    schedule 21.08.2015
comment
Я полагаю, что это принцип проектирования, в котором действия должны быть автономными и независимыми, но я не понимаю, почему это должно быть так сложно и почему сериализуемого объекта будет недостаточно, и вместо этого нам нужно пройти через эту боль создания посылки. объектов, но это другая тема. Что касается вашего вопроса, просто подумайте об активности как о разных процессах, которые, очевидно, не могут совместно использовать память (с точки зрения С++) и поэтому нуждаются в механизме для передачи вещей.   -  person kha    schedule 21.08.2015
comment
@kha, сериализуемого достаточно. Parce быстрее и предпочтительнее. Кроме того, есть несколько плагинов для Android Studio, которые реализуют парсинг одним щелчком мыши, так что я не уверен насчет боли.   -  person poss    schedule 21.08.2015
comment
@poss, не могли бы вы рассказать мне один из плагинов? (Кстати, я не злюсь, искренне рад слышать о его существовании!) Я не знал об их существовании до вашего комментария, отсюда и комментарий о боли. Я не мог сделать сериализуемую работу (putExtra не работал с ней), но если есть простой способ создания меток посылок, я буду очень рад его использовать. Создание их вручную, как я делал до сих пор, действительно болезненно и чревато ошибками.   -  person kha    schedule 21.08.2015
comment
@kha Я думаю, что использую этот, но не могу проверить прямо сейчас: плагины .jetbrains.com/plugin/7332?pr=androidstudio Вы должны иметь возможность искать parce или parceable непосредственно в Studio, чтобы найти их.   -  person poss    schedule 21.08.2015
comment
@возможно здорово. тывм. Я сделаю это, когда буду дома.   -  person kha    schedule 21.08.2015


Ответы (3)


Это связано с моделью активности Android.

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

Намерение, которое вы используете для запуска действий, сохраняется диспетчером действий, чтобы его можно было использовать для воссоздания действия, когда пользователь возвращается к нему. Вот почему все данные в вашем намерении должны быть разделены.

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

person Snild Dolkow    schedule 21.08.2015
comment
Что ж, это имеет смысл! Большое спасибо! - person Kommissar Fahrner; 24.08.2015

Parcel или parcalable — это эффективный и альтернативный способ сериализации объекта в Android. Это альтернатива сериализации в Java Core. Java Serialization API позволяет нам преобразовывать объект в поток, который мы можем отправить по сети или сохранить в виде файла или сохранить в БД для последующего использования. Это способ обмена объектами между отправителем и получателем (класс). Receiver, чем десериализует этот объект. В Android посылки используются для обмена объектами между различными действиями с помощью намерений.

person Prashant_M    schedule 21.08.2015

java не работает как c/c++, вы не работаете напрямую с памятью. Если вы хотите передать объект из A в B, вы должны установить его в Bundle и добавить этот пакет в намерение. если это пользовательский класс, давайте назовем его C, C должен реализовать возможность разделения. Java работает по значению, а не по ссылке.

настраиваемые объекты

как передавать данные между действиями?

person CptEric    schedule 21.08.2015
comment
Java работает по значению, а не по ссылке. Хотя технически это верно, программиста на C++ это вводит в заблуждение. Переменные объекта всегда являются ссылками (указателями), поэтому передача этого аргумента будет передавать ссылку - Java никогда не скопирует ваш объект при передаче аргументов (что означает работу по значению для многих программистов C/C++). - person Snild Dolkow; 21.08.2015
comment
это все еще не причина для отрицательного ответа, приложения для Android работают на уровне, при котором указатели памяти (с той же функциональностью в C/C++) не только бесполезны, но и недостижимы. - person CptEric; 21.08.2015
comment
О, я не минусовал из-за этого. Я проголосовал против, потому что ваш ответ не имеет отношения к вопросу: почему мне нужно использовать посылку?. - person Snild Dolkow; 21.08.2015