Что onCreate (Bundle saveInstanceState)

Может ли кто-нибудь помочь мне узнать о Bundle savedInstanceState в onCreate(Bundle savedInstanceState) Я новичок в Android. Я пытаюсь понять это с сайта developer.android.com. Но я не могу понять. Кто-нибудь может упростить?


person user1077015    schedule 30.05.2012    source источник
comment
Это хорошее видео: youtube.com/watch?v=kkYIMZw9gzQ   -  person Francisco Corrales Morales    schedule 13.01.2015
comment
Просто в качестве справки из первых рук я оставлю это здесь: developer. android.com/guide/components/activities/   -  person carloswm85    schedule 27.11.2020


Ответы (6)


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

... вы должны использовать метод onPause() для записи любых постоянных данных (например, пользовательских правок) в хранилище. Кроме того, метод onSaveInstanceState(Bundle) вызывается перед помещением активности в такое фоновое состояние, что позволяет сохранить любое динамическое состояние экземпляра в вашей активности в данный Bundle, чтобы позже получить его в onCreate(Bundle), если активность необходимо создать заново. Дополнительную информацию о том, как жизненный цикл процесса связан с выполняемыми в нем действиями, см. в разделе «Жизненный цикл процесса». Обратите внимание, что важно сохранять постоянные данные в onPause() вместо onSaveInstanceState(Bundle), потому что последний не является частью обратных вызовов жизненного цикла, поэтому не будет вызываться в каждой ситуации, как описано в его документации.

источник

person Dhruv Gairola    schedule 30.05.2012
comment
используют ли другие действия один и тот же пакет? Если я начну другое действие, передаст ли он пакет из первого? - person Francisco Corrales Morales; 13.01.2015

onCreate(Bundle savedInstanceState) вы получите Bundle нулевое значение, когда активность запустится в первый раз, и она начнет использоваться при изменении ориентации активности .......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

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

мы можем загрузить сохраненное состояние экземпляра из Bundle, переданного в качестве аргумента методу onCreate. Мы также можем загрузить сохраненное состояние экземпляра в методе onRestoreInstanceState. Но я оставлю это для читателей, чтобы понять.

person Dheeresh Singh    schedule 30.05.2012
comment
savedInstanceState будет не-null, если onSavedInstanceState() ранее вызывался. изменения ориентации - только один пример, в котором это может произойти. - person Alex Lockwood; 30.05.2012
comment
@AlexLockwood, я пытаюсь продумать все ситуации, в которых это может произойти. Есть ли документация? Один пример, о котором я могу думать, — это когда пользователь переключает приложения и возвращается, но активность была уничтожена для восстановления ресурсов. В этом случае Android воссоздаст активность с пакетом, если onSaveInsanceState() был переопределен, верно? - person batbrat; 29.03.2014
comment
@batbrat Да ... комментарий, который я сделал (почти два года назад), не совсем корректен. Я предполагаю, что лучший способ выразить это так: аргумент Bundle для onCreate(Bundle) будет не-3_ тогда и только тогда, когда Activity ранее вызывал метод onSaveInstanceState. Это происходит во время изменения ориентации... а также происходит, когда активность возвращается после того, как она была уничтожена ОС, и когда вы запускаете любое другое интересующее изменение конфигурации на вашем устройстве. - person Alex Lockwood; 30.03.2014
comment
Спасибо за разъяснение Алексей. Хорошо иметь некоторую ясность по этому вопросу. Я забыл об изменениях конфигурации, кроме переключателей ориентации, в частности. - person batbrat; 30.03.2014

Как ответил Друв Гайрола, вы можете сохранить состояние приложения, используя Bundle saveInstanceState. Я пытаюсь привести очень простой пример, который новички вроде меня смогут легко понять.

Предположим, у вас есть простой фрагмент с TextView и Button. Каждый раз, когда вы нажимаете кнопку, текст меняется. Теперь измените ориентацию вашего устройства/эмулятора и обратите внимание, что вы потеряли данные (означает, что измененные данные после нажатия вы получили), и фрагмент снова запускается как в первый раз. Используя Bundle saveInstanceState, мы можем избавиться от этого. Если вы посмотрите на жизненный цикл фрагмента.жизненный цикл фрагмента, вы получить, что метод "onSaveInstanceState" вызывается, когда фрагмент вот-вот будет уничтожен.

Итак, мы можем сохранить состояние, означающее, что измененное текстовое значение в этом пакете, как это

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }

После того, как вы сделаете ориентацию, будет вызван метод onCreate, верно? так что мы можем просто сделать это

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        //it is the first time the fragment is being called
        counter = 0;
    }else{
        //not the first time so we will check SavedInstanceState bundle
        counter = savedInstanceState.getInt("value",0); //here zero is the default value
    }
}

Теперь вы не потеряете свою ценность после ориентации. Измененное значение всегда будет отображаться.

person Asad    schedule 30.07.2016
comment
Обратите внимание, что это справедливо и для Activity. Можете ли вы подробнее объяснить разницу между (Bundle of Activity) и Bundle of Fragment? - person laalaguer; 21.04.2017
comment
Вы можете получить четкое представление о жизненных циклах действия и фрагмента, где действие может отображать несколько фрагментов одновременно. Итак, основное отличие состоит в том, что вы можете сохранить некоторые значения для всех фрагментов действия, тогда вы будете используйте пакет действий, в противном случае вам следует использовать пакет фрагментов, если он предназначен для определенного фрагмента. - person Asad; 21.04.2017

Функция onCreate (Bundle saveInstanceState) в Android:

  1. Когда действие сначала вызывается или запускается, метод onCreate(Bundle saveInstanceState) отвечает за создание действия.

  2. Когда когда-либо ориентация (т. е. с горизонтальной на вертикальную или с вертикальной на горизонтальную) активности изменяется или когда действие принудительно завершается любой операционной системой, то saveInstanceState, т. е. объект класса Bundle, сохраняет состояние действия.

  3. После изменения ориентации onCreate(Bundle saveInstanceState) вызовет и воссоздаст действие и загрузит все данные из saveInstanceState.

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

  5. onCreate() не требуется для приложений. Но причина, по которой он используется в приложении, заключается в том, что этот метод является лучшим местом для размещения кода инициализации.

  6. Вы также можете поместить свой код инициализации в onStart() или onResume(), и когда ваше приложение загрузится первым, оно будет работать так же, как и в onCreate().

person Abhi    schedule 21.01.2018

onCreate(Bundle) вызывается при первом запуске активности. Вы можете использовать его для выполнения однократной инициализации, такой как создание пользовательского интерфейса. onCreate() принимает один параметр, который либо равен нулю, либо имеет некоторую информацию о состоянии, ранее сохраненную onSaveInstanceState.

person Community    schedule 01.12.2013

onCreate(Bundle saveInstanceState) вызывается, и saveInstanceState будет ненулевым, если ваша активность была прекращена в сценарии (визуальном представлении), описанном выше. Затем ваше приложение может захватывать (перехватывать) данные из saveInstanceState и регенерировать вашу активность.

person kabilan    schedule 05.03.2014