В чем разница между сохранением с saveInstance и аргументом фрагмента? - PullRequest
0 голосов
/ 17 октября 2018

В Android Fragment у него есть onSaveInstanceState(), что позволяет сохранять некоторые данные для восстановления состояния, когда ОС воссоздает фрагмент.

onSaveInstanceState(outState: Bundle) {
    outState.putString("dataStr", dataStr)
}

Как насчет данных, уже находящихся в аргументе фрагмента?Кажется, после того, как фрагмент воссоздан, предыдущие аргументы также восстановлены.

// set the argument
Bundle bundle = new Bundle();
bundle.putString("dataStr", dataStr);
AFragment aFragment = new AFragment();
aFragment.setArguments(bundle);

//get the argument inside the AFragment
Bundle bundle=getArguments();  

Означает ли это, что если что-то находится в аргументе фрагмента, то их не нужно сохранять через onSaveInstanceState()?

Вопрос: поскольку аргумент может быть обновлен внутри фрагмента, это альтернатива для сохранения данных в аргументе вместо сохранения через onSaveInstanceState()?

Или какая-то разница с использованием этих двух?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

onSaveInstanceState () / onRestoreInstanceState () вызывается Android в явном виде только тогда, когда нужно восстановить действие / фрагмент (особенно при изменениях конфигурации), представьте, что пользователь началнапечатайте что-нибудь, а затем измените ориентацию своего экрана, если вы не обработали состояние сохранения, он потеряет свои входные данные.

Аргументы фрагментов , с другой стороны, используются для создания экземпляров фрагментов,Аргументы будут доступны, даже если фрагмент будет воссоздан НО Это будет начальное состояние.

Итак, подведем итог, если вы хотите создать новый фрагмент с некоторыми аргументами * 1014.* (как имя пользователя ...) вам нужно использовать аргументы.

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

Для дальнейшего понимания того, как работает сохранение / восстановление, я рекомендую эту статью

0 голосов
/ 17 октября 2018

saveInstance : saveInstanceState, когда вы часто перемещаетесь назад и вперед между действиями, и помните, что когда вы закрываете приложение, оно означает, что оно удаляется из памяти, информация также будет потеряна.

Bundle: enter image description here Bundle использует карту для удержания дополнений, в которые вы кладете.таким образом, нет никакой разницы между картой и комплектом.но когда вы собираетесь отправлять данные в другое действие (или любые другие компоненты IPC, такие как Service, BroadcastReceiver и т. д.), карта будет преобразована в байт [] через Parcel и отправлена ​​в пункт назначения.в пункте назначения данные будут идти в том же потоке в обратном порядке, и байт [] будет распакован в Map, и вы можете получить дополнительные данные, предоставив те же ключи.

Таким образом, Bundle похож на карту, которую также можно упорядочить/ unmarshalled к / от байта [].одно важное замечание: вы не можете использовать этот байт [] для сохранения вашего пакета, так как он предназначен ТОЛЬКО для передачи в компоненты и не будет работать, если изменяется базовая структура данных.

...