나갔다 다시 들어온다는 말은 앱을 종료했다 다시 실행한다는 말로 이해하겠습니다. 그렇게 하시려면 Persistent storage(영구저장장치)에 데이터를 기록하셨다가 앱이 다시 실행될 때 저장장치에 해당 값이 있으면 보여주면 됩니다. Persistent storage는 파일이나 데이터베이스를 사용하는 것이 일반적인데, 저장할 데이터가 작/적다면, sharedpreferences에 할 수도 있구요, 그냥 일반 파일을 사용하셔도 됩니다. 그리고 데이터베이스를 사용하시면 좀 더 많은 옵션을 가질 수 있습니다. SQLLite는 안드로이의 플랫폼에 탑재되어 있으므로 Room 같은 데이터베이스 라이브러리를 쓰시면 쉽게 제어할 수 있습니다. 그리고 SharedPreference를 사용하실 거면 Jetpack에 좀 더 향상된 라이브러리가 나왔는데 그것도 한번 살펴보시면 좋을 듯 합니다. (https://android-developers.googleblog.com/2020/09/prefer-storing-data-with-jetpack.html)
만약 앱을 종료하는 게 아니라 앱이 다른 앱으로 갔다 오거나 디바이스 홈버튼을 누른 것 처럼 백그라운드로 갔다가 다시 포그라운드로 다시 나오는 상황이면, 위의 말씀드린 방법을 그대로 적용하셔도 되구요. 님처럼 간단한 상황일 경우는 Activity의 경우는 onSaveInstance 와 onCreate 이벤트를 조합하셔 사용하셔도 됩니다. (링크 참조 https://developer.android.com/topic/libraries/architecture/saving-states)
private static final SELECTED_POSITION_KEY = "selected_position"
TextView textView;
// 몇번째 배열 요소가 눌렸는지
int selectePosition;
String[] displayTexts = ...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
textView = (TextView) findViewById(R.id.text_view);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(v ->
selectedPosition = //값 저장
)
restoreViewState(savedInstanceState)
}
// 이전에 저장된 뷰상태가 있다면, 뷰상태 복구는 여기서도 가능함.
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
restoreViewState(savedInstanceState);
}
private void restoreViewState(Bundle savedInstanceState) {
boolean viewRestored = savedInstanceState != null)
if (!viewRestored) return;
selectedPosition = savedInstanceState.getInt(SELECTED_POSITION_KEY);
if (selectedPosition < 0) {
selectedPosition = 0;
return;
}
textView.setText(displayTexts[selectedPosition);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(SELECTED_POSITION_KEY, selectedPosition);
super.onSaveInstanceState(outState);
}
그리고 다른 앱을 뷰상태를 저장했다가 복구하는 테스트는
1. 안드로이드 스튜디오 실행한 상태로 앱을 실행한다.
2. 디바이스 백버튼을 누른다.
3. 안드로이드 스튜디오의 로그캣에 중지 버튼을 누른다.
4. 디바이스의 타스크 매니저에서 앱을 다시 실행한다.
이렇게 했을 때 상태 복구가 제대로 된 것이라면 확실하게 처리된 것입니다.
참고로, 한 액티비티에 여러개의 프레그먼트를 사용할 경우는 상황에 따라 프레그먼트에서는 onSaveInstance가 발생하지 않을 수있습니다.
도움이 되시길.