В некоторых случаях удобнее устанавливать точки останова только на некоторые из методов.
Используя LLDB, мы можем, например, поставить точку останова на все методы ViewDidLoad по имени.
(lldb) breakpoint set -n ViewDidLoad
Здесь «-n» означает по имени.
Кроме того, мы можем поместить контрольные точки по имени селектора:
(lldb) breakpoint set -S alignLeftEdges:
Здесь «-S "означает селектор.
Необходимо переопределить onSaveInstanceState(Bundle savedInstanceState)
и записать значения состояния приложения, которые Вы хотите изменить на Bundle
параметр как это:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putBoolean("MyBoolean", true);
savedInstanceState.putDouble("myDouble", 1.9);
savedInstanceState.putInt("MyInt", 1);
savedInstanceState.putString("MyString", "Welcome back to Android");
// etc.
}
Пакет является по существу способом сохранить NVP ("Пара"имя-значение"") карта, и это будет передано в onCreate()
и также onRestoreInstanceState()
, где Вы тогда извлекли бы значения как это:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
double myDouble = savedInstanceState.getDouble("myDouble");
int myInt = savedInstanceState.getInt("MyInt");
String myString = savedInstanceState.getString("MyString");
}
Вы обычно использовали бы эту технику для хранения значений экземпляра для приложения (выборы, несохраненный текст, и т.д.).
Эти savedInstanceState
только для сохранения состояния, связанного с текущим экземпляром Действия, например, текущая информация о навигации или выборе, так, чтобы, если Android уничтожает и воссоздает Действие, это могло возвратиться, как это было прежде. См. документацию для onCreate
и onSaveInstanceState
Для большего количества долговечного состояния, рассмотрите использование базы данных SQLite, файла или предпочтений. См. Сохранять Постоянное состояние .
можно использовать Live Data
и View Model
Для Lifecycle Handel
От JetPack
. посмотрите эту Ссылку:
https://developer.android.com/topic/libraries/architecture/livedata
Вместо этого необходимо использовать ViewModel, который сохранит данные до жизненного цикла действия.
Существует способ заставить Android сохранить состояния, не реализовывая метода. Просто добавьте эту строку к своей Декларации в объявлении Действия:
android:configChanges="orientation|screenSize"
Это должно быть похожим на это:
<activity
android:name=".activities.MyActivity"
android:configChanges="orientation|screenSize">
</activity>
Здесь можно найти больше информации об этом свойстве.
рекомендуется позволить Android обработать это для Вас, чем ручная обработка.
onSaveInstanceState
вызывается, когда системе нужна память и она убивает приложение. Он не вызывается, когда пользователь просто закрывает приложение. Поэтому я думаю, что состояние приложения также должно быть сохранено в onPause
Оно должно быть сохранено в каком-то постоянном хранилище, таком как Preferences
или Sqlite
На самом деле onSaveInstance
состояние вызывается, когда Activity переходит в фоновый режим
Цитата из документации :
«метод onSaveInstanceState (Bundle)
вызывается перед переводом действия в такое фоновое состояние»
Обратите внимание, что НЕ безопасно использовать onSaveInstanceState
и onRestoreInstanceState
для постоянных данных, согласно документации по состояниям активности в http://developer.android.com/reference/android/app/Activity.html.
В документе говорится (в разделе «Жизненный цикл действия»):
Обратите внимание, что важно сохранить постоянные данные в
onPause()
onSaveInstanceState(Bundle)
Поскольку последний не является частью обратные вызовы жизненного цикла, поэтому не будут вызывается в каждой описанной ситуации в его документации.
Другими словами, поместите код сохранения/восстановления для постоянных данных в onPause()
и onResume()
!
EDIT: Для дальнейшего уточнения вот документация onSaveInstanceState()
:
Этот метод вызывается до того, как действие может быть убито, чтобы при его удалении возвращается когда-нибудь в будущем, он сможет восстановить свое состояние. Для Например, если действие B запускается перед действием A и в некоторых Действие точки A убито для возвращения ресурсов, действие A будет иметь возможность сохранить текущее состояние своего пользовательского интерфейса через этот , чтобы при возврате пользователя к действию A, состояние пользовательский интерфейс может быть восстановлен через
onCreate(Bundle)
илиonRestoreInstanceState(Bundle)
.
Мой коллега написал статью, объясняющую состояние приложения на устройствах Android, включая пояснения по жизненному циклу активности и информации о состоянии, как хранить информацию о состоянии и сохранять в состояние Bundle
и SharedPreferences
и посмотрите здесь.
В статье рассматриваются три подхода:
[Code sample – Store state in state bundle]
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
// Store UI state to the savedInstanceState.
// This bundle will be passed to onCreate on next call. EditText txtName = (EditText)findViewById(R.id.txtName);
String strName = txtName.getText().toString();
EditText txtEmail = (EditText)findViewById(R.id.txtEmail);
String strEmail = txtEmail.getText().toString();
CheckBox chkTandC = (CheckBox)findViewById(R.id.chkTandC);
boolean blnTandC = chkTandC.isChecked();
savedInstanceState.putString(“Name”, strName);
savedInstanceState.putString(“Email”, strEmail);
savedInstanceState.putBoolean(“TandC”, blnTandC);
super.onSaveInstanceState(savedInstanceState);
}
[Code sample – store state in SharedPreferences]
@Override
protected void onPause()
{
super.onPause();
// Store values between instances here
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit(); // Put the values from the UI
EditText txtName = (EditText)findViewById(R.id.txtName);
String strName = txtName.getText().toString();
EditText txtEmail = (EditText)findViewById(R.id.txtEmail);
String strEmail = txtEmail.getText().toString();
CheckBox chkTandC = (CheckBox)findViewById(R.id.chkTandC);
boolean blnTandC = chkTandC.isChecked();
editor.putString(“Name”, strName); // value to store
editor.putString(“Email”, strEmail); // value to store
editor.putBoolean(“TandC”, blnTandC); // value to store
// Commit to storage
editor.commit();
}
[Code sample – store object instance]
private cMyClassType moInstanceOfAClass; // Store the instance of an object
@Override
public Object onRetainNonConfigurationInstance()
{
if (moInstanceOfAClass != null) // Check that the object exists
return(moInstanceOfAClass);
return super.onRetainNonConfigurationInstance();
}
enum
тип с точки зрения простоты записи. – FK82 27 September 2010 в 08:21