#android #android-intent
#Android #android-намерение
Вопрос:
Всем привет, я пробую передачу намерений Android между 2 классами, и я понял, что есть 2 метода для передачи намерений ,
Первый — это использование метода GetIntent здесь:
Bundle extras = getIntent().getExtras();
mRowId = (extras != null) ? extras.getLong(DrugsDbAdapter.KEY_ROWID) : null;
И второй метод заключается в доступе к savedInstanceState:
mRowId = (savedInstanceState != null) savedInstanceState.getLong(DrugsDbAdapter.KEY_ROWID) : null;
В обоих методах я пытаюсь получить доступ к RowId, который я затем могу использовать для извлечения данных. В чем разница между обоими методами? Какой из них лучше?
Комментарии:
1. Получаете ли вы свой rowId во 2-м случае? Я предполагаю, что вы этого не делаете, потому что
savedInstanceState
пусто, если вы не добавите туда что-то вonSaveInstanceState
2. Для записи, второй метод не получает или «передает намерения». Оба метода получают пакет пар ключ-значение. Предположительно, это то, что вы имели в виду.
getIntent().getExtras()
дает вам нечто аналогичное параметрам, переданным конструктору.savedInstanceState
это больше похоже на состояние действия, которое было сохранено в какой-то момент.
Ответ №1:
В первом случае вам предоставляются дополнительные возможности намерения, с которого началось это действие, в то время как второй вариант используется, когда onCreate
вызывается второй и более раз, например, при повороте устройства. Этот пакет должен быть заполнен в onSaveInstanceState
.
Комментарии:
1. Теперь я пытаюсь понять это — если пользователь поворачивает экран, получает ли действие снова то же намерение, которое оно получило при первом создании?
2. GetIntent() вернет то же намерение с теми же дополнительными функциями. Но аргумент Bundle в onSaveInstanceState — это другое дело.
Ответ №2:
GetIntent() используется, чтобы сообщить вам, что Intent
запустило это Activity
. Он доступен в любом месте Activity
. У него есть Bundle
, но у него также есть другие метаданные.
onSaveInstanceState(Bundle)
передает вам Bundle
, чтобы переменные экземпляра сохранялись в вашем приложении до следующего запуска. Это Bundle
поступает только в onCreate()
и onRestoreInstanceState()
, и в нем нет других данных.