В чем разница между GetIntent () и получением намерения из savedInstanceState?

#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() , и в нем нет других данных.