Урок 70. onSaveInstanceState. Сохранение данных Activity при повороте экрана

Обсуждение уроков
vadlm
Сообщения: 3
Зарегистрирован: 10 мар 2012, 15:55

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение vadlm » 21 янв 2014, 17:40

onRetainNonConfigurationInstance
getLastNonConfigurationInstance

про эти методы документация пишет - This method was deprecated in API level 13.
Use the new Fragment API setRetainInstance(boolean) instead; this is also available on older platforms through the Android compatibility package.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение KamiSempai » 22 янв 2014, 13:26

Все правильно, эти методы устарели после появления фрагментов.
Вообще много чего устарело после выхода фрагментов.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение apollox » 24 янв 2014, 14:56

Еще такой вопрос, я тестирую на телефоне с Android 2.2 и на планшете с 4.0.3
Задача, чтобы если размер картинки меньше размера экрана (в пикселах), то картинка показывается как есть.
А если больше размера экрана, то масштабируется по ширине экрана.
На планшете все работает, при повороте экрана картинка масштабируется по ширине экрана.
А вот на телефоне с 2.2 получается так: при портретной ориентации, картинка по ширине экрана, а при повороте на альбомную, почему-то свой размер не меняет и не растягивается по ширине...

Код такой:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
		<WebView
			 android:id="@+id/webView"
			 android:layout_width="fill_parent"
			 android:layout_height="fill_parent">
		</WebView>
</LinearLayout>

Код: Выделить всё

public class MainActivity extends Activity {
	
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   
    WebView webView = (WebView) findViewById(R.id.webView);
	webView.loadUrl("http://www.atorus.ru/public/ator/data/photos/b45479-5.jpg");
	webView.setInitialScale(1);
	webView.getSettings().setLoadWithOverviewMode(true);
	webView.getSettings().setUseWideViewPort(true);
  
  }
}
В манифесте:

Код: Выделить всё

        <activity
            ...
            android:configChanges="orientation|screenSize"
    		android:windowSoftInputMode="adjustResize"
    		android:hardwareAccelerated="false">
При повороте экрана картинка не растягивается:

Подскажите пожалуйста, что не так...
Вложения
rotate.jpg
rotate.jpg (83.68 КБ) 13327 просмотров

Pavel A
Сообщения: 7
Зарегистрирован: 21 июн 2013, 15:16

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение Pavel A » 28 янв 2014, 13:57

Pavel A писал(а):
rezak90 писал(а):
Fry писал(а):А что - методы onRestoreInstanceState /onSaveInstanceState хранят данные не в памяти?
да, но статика то будет жить всегда, даже если мы уже на другой активити, а всё что было в бандле умрёт с активити
Хотелось бы уточнить , данные в SaveInstanceState точно уничтожается вместе а активити ?
от переизбытка ответов отвечу тогда сам себе 8-)

bundle SaveInstanceState сохраняется в специальной области Activity Record , которая , хотя и связана с той активити в которой создана , но имеет собственный цикл жизни .
Запись в Activity Record будет уничтожена если :
1. Пользователь явно нажал кнопку Back , то есть активити закрывается и соответственно промежуточные результаты хранить больше нет необходимости
2. Устройство было перезагружено
3. Прошло достаточно долго времени , в течении которого к записи в Activity Record не обращались .

в остальных случаях запись будет храниться , даже если активити , в которой она создана будет уничтожена , что на практике значит , что хранить промежуточное состояние в bundle в достаточной степени надежно. Спасибо всем кто участвовал.

w201
Сообщения: 9
Зарегистрирован: 08 дек 2013, 12:43

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение w201 » 29 янв 2014, 19:04

А у меня вопрос на засыпку
Допустим есть два активити из первого во второй передаем в extras какие-то значения, которые вычитываем затем в активити2 в oncreate.
Вопрос - что происходит с extas когда мы повернем активити 2?

Тончее я знаю, что extras сохраняются, но всегда ли это так и есть ли исключения я не смог.

argamidon
Сообщения: 6
Зарегистрирован: 28 окт 2013, 11:13

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение argamidon » 14 фев 2014, 14:46

У меня два вопроса.
1) почему при обычном сворачивании (кнопка home) вызывается метод onSaveInstanceState();
2) куда уходят эти данные? дело в том что если просто свернуть программу, по непонятной причине вызывается метод onSaveInstanceState, при повторном выдвижении свернутой Activity на передний план метод onCreate естественно не вызывается , метод onResoteInstanceState тоже не вызывается (и не должен). так куда идут данные при сворачивании программы и для чего вызов onSaveInstanceState при сворачивании?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение Foenix » 14 фев 2014, 15:37

все написано в библии
http://developer.android.com/reference/ ... os.Bundle)
вообще.. я бы не рассчитывала на этот метод особо..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

argamidon
Сообщения: 6
Зарегистрирован: 28 окт 2013, 11:13

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение argamidon » 14 фев 2014, 15:43

я чтитал это . спасибо. там написано что вызывается для activity которая может быть уничтожена. это и есть оно?

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение n0tb0dy » 20 мар 2014, 17:16

Добрый день!

у меня почему то вообще не срабатывает метод onRestoreInstanceState

делаю так

Код: Выделить всё

@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
	    super.onRestoreInstanceState(savedInstanceState);
	    Log.d(TAG, "onRestoreInstanceState A");
	  }
нажимаю кнопку Home, возвращаюсь обратно в приложение, и ни чего в логах, запускаю дургую Активность из этой возвращаюсь обратно и опять ни чего в логах :(

чего делаю не так?

Тарас
Сообщения: 3
Зарегистрирован: 25 мар 2014, 05:42

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение Тарас » 25 мар 2014, 05:46

Здравствуйте, а где можно достать остальные видео уроки? А то на ютубе последний урок 63. по видео урокам быстрее запоминается и лучше понимается))

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение damager82 » 02 апр 2014, 09:08

Тарас писал(а):Здравствуйте, а где можно достать остальные видео уроки? А то на ютубе последний урок 63. по видео урокам быстрее запоминается и лучше понимается))
Видеоуроки есть только те, что на youtube. Остальные просто не созданы еще.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение n0tb0dy » 02 апр 2014, 13:25

argamidon писал(а): 2) куда уходят эти данные? дело в том что если просто свернуть программу, по непонятной причине вызывается метод onSaveInstanceState, при повторном выдвижении свернутой Activity на передний план метод onCreate естественно не вызывается , метод onResoteInstanceState тоже не вызывается (и не должен). так куда идут данные при сворачивании программы и для чего вызов onSaveInstanceState при сворачивании?
мне вот тоже не понятно, куда сохраняются эти данные

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

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение n0tb0dy » 02 апр 2014, 13:37

Отображение вызова метода onRestoreInstanceState просто НЕ ПОКАЗЫВАЛОСЬ в эмуляторе AVD Android 2.3.3

таки эмулятор AVD Android 2.3.3 глюкавый аднака

Когда запустил ту же прогу на Genymotion все стало отображаться нормально.

Но вопросы остаются... куда уходят данные? и как их можно подхватить из сохраненного состояния когда активность была уничтожена?

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение aleksbim » 24 апр 2014, 22:23

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

public void onCreate(Bundle savedInstanceState) {
Ведь отсюда эти методы никто не вызывал!
}

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение klblk » 25 апр 2014, 03:10

а то что метод onCreate тоже никто не вызывал вас не смутило?)
с такими вопросами в исходники нужно смотреть:
http://grepcode.com/file/repository.gre ... .Intent%29

fedor77
Сообщения: 2
Зарегистрирован: 10 май 2014, 21:48

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение fedor77 » 10 май 2014, 21:57

Всем привет. Все прочитал, но прям тупик!
Есть активити a1 и a2. Из a1 перехожу в a2 через - у a1 onPause, onSaveInstanceState, onStop.
В a2 нажимаю назад для перехода в a1. У a1 - onDestroy, onCreate, onResume.
Нет восстановления!!! В хелпе читал, что даже текст в EditText восстанавливается автоматически. Вообще ничего не происходит.
Почему не вызывается onRestoreInstanceState?
Заранее спасибо)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение klblk » 12 май 2014, 06:49

fedor77 писал(а):Всем привет. Все прочитал, но прям тупик!
Есть активити a1 и a2. Из a1 перехожу в a2 через - у a1 onPause, onSaveInstanceState, onStop.
В a2 нажимаю назад для перехода в a1. У a1 - onDestroy, onCreate, onResume.
Нет восстановления!!! В хелпе читал, что даже текст в EditText восстанавливается автоматически. Вообще ничего не происходит.
Почему не вызывается onRestoreInstanceState?
Заранее спасибо)
что-то с кодом не так... onDestroy быть не должно.

fedor77
Сообщения: 2
Зарегистрирован: 10 май 2014, 21:48

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение fedor77 » 12 май 2014, 15:32

klblk писал(а):
fedor77 писал(а):Всем привет. Все прочитал, но прям тупик!
Есть активити a1 и a2. Из a1 перехожу в a2 через - у a1 onPause, onSaveInstanceState, onStop.
В a2 нажимаю назад для перехода в a1. У a1 - onDestroy, onCreate, onResume.
Нет восстановления!!! В хелпе читал, что даже текст в EditText восстанавливается автоматически. Вообще ничего не происходит.
Почему не вызывается onRestoreInstanceState?
Заранее спасибо)
что-то с кодом не так... onDestroy быть не должно.
Вроде ничего мудренного)
В a1 - EditText и две кнопки.
Одна кнопка перекидывает на a2. Вот сам код функции.
public void goChat(View view) {
Intent intent = new Intent(this, ChatAtcivity.class);

if (firstCall) {
message = editText.getText().toString();
WorkClass.getInstance().setMessageText(message);

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm");
date = sdf.format(new Date());

intent.putExtra("way", 0);
intent.putExtra("status", "Incomming");
intent.putExtra("message", message);
intent.putExtra("date", date);

connectionState = 1;
} else {
connectionState = 0;
}

startActivity(intent);
}

Остальной код - это то, что создано при генерации нового проекта и функции информирования о состоянии активности.

@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
Log.d(TAG, "Main onStart");
}
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now "resumed").
Log.d(TAG, "Main onResume");
}
@Override
protected void onPause() {
super.onPause();
// Another activity is taking focus (this activity is about to be "paused").
Log.d(TAG, "Main onPause");
}
@Override
protected void onStop() {
super.onStop();
// The activity is no longer visible (it is now "stopped")
Log.d(TAG, "Main onStop");
}

@Override
protected void onDestroy() {
super.onDestroy();
// The activity is about to be destroyed.
Log.d(TAG, "Main onDestroy");
}

protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("firstCall", firstCall);
Log.d(TAG, "onSaveInstanceState");
}

protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
firstCall = savedInstanceState.getBoolean("first_call");
Log.d(TAG, "onRestoreInstanceState");
}

AlexVinn
Сообщения: 81
Зарегистрирован: 04 апр 2014, 04:56

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение AlexVinn » 03 июн 2014, 22:23

Инициализируются 3 таба так вот (код). Подскажите, как сохранить на них ссылки
и потом обрабно достать при поворотах экрана ?

Tab1 -

public class Tab1 extends Fragment {
...
}

Хелп, плз. Спасибо.

[syntax=java5]
private void setupTabs() {
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);

Tab tab1 = actionBar
.newTab()
.setText("Tab1")

.setTag("Tab1")
.setTabListener(
new SupportFragmentTabListener<Tab1>(R.id.flContainer,
this, "Tab1", Tab1.class));

actionBar.addTab(tab1);
actionBar.selectTab(tab1);
...
}
[/syntax]
Тут должна быть подпись.

nazar_developer
Сообщения: 15
Зарегистрирован: 02 июл 2014, 15:26

Re: Урок 70. onSaveInstanceState. Сохранение данных Activity

Сообщение nazar_developer » 13 сен 2014, 13:40

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

Ответить