스택큐힙리스트
세이브 인스턴스 상태를 사용하여 활동 상태를 어떻게 저장할 수 있나요? 본문
저는 Android SDK 플랫폼에서 작업을 하고 있는데, 애플리케이션의 상태를 저장하는 방법이 조금 불분명합니다. 그래서 'Hello, Android' 예제를 약간 다듬어보았습니다.
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
private TextView mTextView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = new TextView(this);
if (savedInstanceState == null) {
mTextView.setText(Welcome to HelloAndroid!);
} else {
mTextView.setText(Welcome back.);
}
setContentView(mTextView);
}
}
가장 간단한 경우에는 충분할 것으로 생각했지만, 앱에서 어떻게 이동하든 항상 첫 번째 메시지로 응답합니다.
저는 onPause를 오버라이딩하거나 그런 식으로 해결 방법이 간단하다고 확신합니다. 그러나 30분 정도 문서를 헤매며 명확한 것을 찾지 못했습니다.
답변 1
당신은 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.
}
번들(Bundle)은 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);
}
어떤 조각으로부터 번역해주세요.
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(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);
}
일반적으로 이 기술은 애플리케이션의 인스턴스 값 (선택 항목, 저장되지 않은 텍스트 등)을 저장하는 데 사용됩니다.
답변 2
액티비티 상태를 저장하려면 save instance state를 사용해야합니다. 이 기능은 앱에서 사용자의 상호작용 중에 앱 프로세스가 종료되었다가 재시작되는 경우 매우 유용합니다. 이 상황에서 화면이 지속적으로 보존되면 사용자는 다시 시작할 때 마지막으로 본 화면으로 돌아갈 수 있습니다. 이러한 기능을 구현하려면 액티비티에서 onSaveInstanceState() 메서드를 재정의하여 각 뷰에 대한 데이터를 번들에 추가해야합니다.
이렇게 저장된 인스턴스 상태는 onCreate() 메서드의 Bundle 파라미터를 통해 복원됩니다. 액티비티가 처음으로 생성될 때 onCreateView()이 호출되기 전에 이 메서드가 호출됩니다. 이때 onSaveInstanceState()에서 저장한 데이터를 사용하여 액티비티를 복원합니다. 앱 프로세스가 처음 시작되었을 때는 이 저장된 상태가 존재하지 않으므로 onCreate()에서 번들이 널(null)인지 확인하는 것이 매우 중요합니다.
안드로이드 앱을 개발 중에는 onSaveInstanceState() 메서드를 사용하여 액티비티 상태를 저장하는 것이 매우 중요합니다. 이는 앱의 사용성을 개선하고 고객 만족도를 높이는 데 매우 유용합니다. 이 기능은 사용자 정의 뷰 컴포넌트에서 사용자가 변경한 데이터를 저장할 수 있는 또 다른 방법을 제공합니다. 이러한 이유로 액티비티 상태를 저장하는 기능을 save instance state로 구현하는 것이 좋습니다.