2015-11-26 5 views
3

Я искал объяснение этого и не мог найти его.Обоснование системы намерений Android

Меня спросили на собеседовании, почему Android не позволяет передавать какой-либо тип с намерением.

Я хорошо осведомлен о возможностях - сериализации, реализующих интерфейс «Parcelable», расслоение и т.д.

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

ответ

6

Первая причина заключается только в том, что получатель намерения почти всегда будет в другом процессе, а это означает другой jvm. Поскольку процесс и приложения представляют собой песочницу (что означает, что им не разрешено видеть память друг друга), вам необходимо отправить описание объекта с помощью сериализации (чаще всего parcelables в android), а не отправлять экземпляр объекта (то есть: указатель в память, где она есть).

Другая причина, по словам Каффса, заключается в том, что это намерение может пережить продолжительность жизни объекта, который вы хотите отправить (особенно с ожидающими намерениями).

+0

В то время как приемник * может * быть в другом процессе, на самом деле большую часть времени он будет в том же * процессе, что и в действиях приложения, вперёд другому, или взаимодействует с одним из своих Сервисов, который обычно все работают в одном и том же процессе (хотя это настраивается). Механизм является агностическим процессом, но это не означает, что он обязательно будет нацелен на другой процесс, кроме системного кода, который управляет намерениями. –

6

Пользовательские объекты имеют ограниченный жизненный цикл. Они могут содержать переменные и т. Д., Которые будут потеряны, если устройство было перезапущено.

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

Смежные вопросы