2012-05-30 2 views
96

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

+2

Это хорошее видео: https://www.youtube.com/watch?v=kkYIMZw9gzQ –

ответ

91

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

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

source

+1

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

12

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. Но я оставлю это для читателей, чтобы понять.

+8

'savedInstanceState' будет нечеловеческим, если ранее был вызван' onSavedInstanceState() '. изменения ориентации - только один пример, в котором это может произойти. –

+0

@AlexLockwood, я пытаюсь думать обо всех ситуациях, когда это может произойти. Есть ли какая-либо документация? Один экземпляр, о котором я могу думать, это то, что пользователь переключает приложения и возвращается, но действие было уничтожено для восстановления ресурсов. В этом случае андроид будет воссоздавать активность с помощью пакета, если onSaveInsanceState() был переопределен, правильно? – batbrat

+1

@batbrat Да ... комментарий, который я сделал (почти два года назад), не совсем корректен. Я думаю, что лучший способ поставить аргумент 'Bundle' в' onCreate (Bundle) 'будет не -null, тогда и только тогда, когда' Activity' имел ранее обработанный метод 'onSaveInstanceState'. Это происходит во время изменений ориентации ... и также происходит, когда активность возвращается после того, как ее убила ОС, и когда вы вызываете любое другое изменение конфигурации на вашем устройстве. –

3

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

0

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

7

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

Предположим, у вас есть простой фрагмент с TextView и Button.Каждый раз, когда вы нажимаете кнопку, текст меняется. Теперь измените ориентацию своего устройства/эмулятора и обратите внимание, что вы потеряли данные (это означает, что данные изменились после нажатия на вас), а фрагмент начинается с первого раза. Используя Bundle savedInstanceState, мы можем избавиться от этого. Если вы посмотрите на жизненный кайл фрагмента. Fragment Lifecylce вы получите, что метод «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 
    } 
} 

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

+0

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

+0

Вы можете получить четкое представление о жизненных циклах активности и фрагментах, в которых активность может отображать сразу несколько фрагментов. Таким образом, основное отличие состоит в том, что вы можете сохранить некоторые значения для всех фрагментов активности, тогда u будет использовать пучок активности, иначе u должен использовать пакет фрагмента, если он предназначен для определенного фрагмента. – Asad

1

OnCreate (Bundle savedInstanceState) Функция в Android:

1) Когда активность первого вызова или запущен затем OnCreate (Bundle savedInstanceState) метод отвечает создать свою деятельность.

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

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

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

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

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

Смежные вопросы