Вопрос по android – Что происходит при создании (Bundle saveInstanceState)

112

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

Это хорошее видео:youtube.com/watch?v=kkYIMZw9gzQ Francisco Corrales Morales

Ваш Ответ

6   ответов
3

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

15

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

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

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

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

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

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

... you should use the onPause() method to write any persistent data (such as user edits) to storage. In addition, the method onSaveInstanceState(Bundle) is called before placing the activity in such a background state, allowing you to save away any dynamic instance state in your activity into the given Bundle, to be later received in onCreate(Bundle) if the activity needs to be re-created. See the Process Lifecycle section for more information on how the lifecycle of a process is tied to the activities it is hosting. Note that it is important to save persistent data in onPause() instead of onSaveInstanceState(Bundle) because the latter is not part of the lifecycle callbacks, so will not be called in every situation as described in its documentation.

источник

другие действия совместно используют тот же Пакет? если я запускаю другое действие, он пропускает Пакет от первого?
0

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

3

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

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

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

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

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

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

Это идеальный ответ, спасибо
10

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

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

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

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

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

@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
    }
}

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

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

Похожие вопросы