Урок 70. onSaveInstanceState. Сохранение данных Activity при повороте экрана
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
В манифесте к активности добавляете пару флагов. Например
[syntax=xml]
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
[/syntax]
и она всегда будет в ландшафте или портрете, как выставите
[syntax=xml]
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
[/syntax]
и она всегда будет в ландшафте или портрете, как выставите
-
- Сообщения: 15
- Зарегистрирован: 02 июл 2014, 15:26
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
setRequestedOrientation(0);Mikhail_dev писал(а):В манифесте к активности добавляете пару флагов. Например
[syntax=xml]
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
[/syntax]
и она всегда будет в ландшафте или портрете, как выставите
я зделал вот так еше до того как ви мне подсказали, но он бил только в одном положение, горизотальном, но все би супер, но когда перевернуть его горизонтально но только в противоположную сторону, ничего не меняетса, шас попробую как ви сказали через манифест=)
Спасибо ) , но твой вариант такой же как мой, только в одном положение
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
а нельзя пересоздать объекты Контекста или Активити после уничтожения процессов андроидом, для освобождения памяти. Данные грузятся из интернета и не храню их в базе. меня вполне устраивает,что бы он заново загружал. Получаю нул поинтер когда обращаюсь к объектам активити/контекстаНо если приостановленное Activity уничтожается, например, при нехватке памяти, то соответственно удаляются и все его объекты. И если к нему снова вернуться, то системе надо заново его создавать и восстанавливать данные, которые были утеряны при уничтожении
«Life is too short to spend rewriting code»
-
- Сообщения: 36
- Зарегистрирован: 28 июн 2015, 03:13
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
Добрый день!
В уроке при повороте экрана сказано сначала onSaveInstanceState, а потом onPause
У меня при повороте (проверял на разных AVD) всё время сначала срабатывает onPause, а потом onSaveInstanceState
Запарился искать что не так.
Кто-нибудь подскажет?
В уроке при повороте экрана сказано сначала onSaveInstanceState, а потом onPause
У меня при повороте (проверял на разных AVD) всё время сначала срабатывает onPause, а потом onSaveInstanceState
Запарился искать что не так.
Код: Выделить всё
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
final String LOG_TAG = "myLogs";
int cnt = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(LOG_TAG, "onCreate");
}
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "onDestroy");
}
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "onPause");
}
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "onRestart");
}
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(LOG_TAG, "onRestoreInstanceState");
}
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "onResume ");
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(LOG_TAG, "onSaveInstanceState");
}
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "onStart");
}
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "onStop");
}
public void onclick(View v) {
}
}
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
Т.е., например, у нас есть какой то объект myObj (класс MyObject) и нам надо сохранить ссылку на него при повороте экрана.
public Object onRetainNonConfigurationInstance() {
return myObj;
я так понимаю public MyObject onRetainNonConfigurationInstance... должно быть?
путает тем более что реально есть класс Object
public Object onRetainNonConfigurationInstance() {
return myObj;
я так понимаю public MyObject onRetainNonConfigurationInstance... должно быть?
путает тем более что реально есть класс Object
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
Класс Object является родителем у всех классов в Java. При переопределении метода не надо трогать возвращаемое значение - ломаете сигнатуру. И если надо 2 объекта сохранить, будете 2 метода делать? Как пример использования: http://stackoverflow.com/questions/1704 ... oninstancedassad писал(а):Т.е., например, у нас есть какой то объект myObj (класс MyObject) и нам надо сохранить ссылку на него при повороте экрана.
public Object onRetainNonConfigurationInstance() {
return myObj;
я так понимаю public MyObject onRetainNonConfigurationInstance... должно быть?
путает тем более что реально есть класс Object
Вам при восстановлении надо будет проверить через instaceof является ли получаемый объект (Object) вашим (MyObj) и привести его к этому типу(почему-то нигде никто не проверяет на соответствие типов при приведении, видимо никогда после коллег код не правили, в 5-10 тысячах строк кода не искали эту ошибку)... Я бы вообще смотрел в сторону Parcelable для хранения своих объектов.
-
- Сообщения: 31
- Зарегистрирован: 03 сен 2013, 14:26
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
Еще можно так. Чтобы переменные не переписывались
Код: Выделить всё
public class MainActivity extends Activity {
EditText edText1,edtext2;
Boolean firstStart=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if(firstStart){
edText1=(EditText) findViewById(R.id.editText1);
edtext2=(EditText)findViewById(R.id.editText2);
firstStart=false;
}
}
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
а ежели я вызываю метод setResult(resCode, data)
помещаю в него data в виде интента с данными, как мне получить эти данные в событии onSaveInstanceState()?
можно конечно сохранять все в переменные, но я уж очень ленивый, если я упаковал нужные мне данные с помощью setResult(), то по идее я могу получить их.
однако getIntent() возвращает Intent переданные при вызове второй Activity, а как получить доступ к упакованным данным?
помещаю в него data в виде интента с данными, как мне получить эти данные в событии onSaveInstanceState()?
можно конечно сохранять все в переменные, но я уж очень ленивый, если я упаковал нужные мне данные с помощью setResult(), то по идее я могу получить их.
однако getIntent() возвращает Intent переданные при вызове второй Activity, а как получить доступ к упакованным данным?
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
когда активность переходит на второй план, она может быть уничтожена системой в любой момент, это уже решает система. вся информация попадает в специальную системную запись которая связана с активностью и хранится некоторое время. При уничтожении активности запись также будет уничтожена. Поэтому onSaveInstanceState годится только для сохранения промежуточных состояний, например, при повороте экрана устройства.argamidon писал(а):я чтитал это . спасибо. там написано что вызывается для activity которая может быть уничтожена. это и есть оно?
Re: Урок 70. onSaveInstanceState. Сохранение данных Activity
все очень просто. за все отвечает ОС. Вы свернули активити, активити был помещен в стек, однако, не был уничтожен, вы его разворачиваете, активити еще живой и выходит на первый план. Соответственно методы onCreate() и onRestore OS не вызывает, т.к. ничего не поменялось.argamidon писал(а):У меня два вопроса.
1) почему при обычном сворачивании (кнопка home) вызывается метод onSaveInstanceState();
2) куда уходят эти данные? дело в том что если просто свернуть программу, по непонятной причине вызывается метод onSaveInstanceState, при повторном выдвижении свернутой Activity на передний план метод onCreate естественно не вызывается , метод onResoteInstanceState тоже не вызывается (и не должен). так куда идут данные при сворачивании программы и для чего вызов onSaveInstanceState при сворачивании?
С другой стороны, никто не знает когда ОС удалить активити из стека, поэтому метод onSaveInstanceState() вызывается всегда, на всякий случай!