이번 포스팅은 안드로이드 앱이 의도치 않게 죽었을 때, 마지막 시점의 필요한 데이터를 저장해두는 방법에 대해 정리한다.
이 기능을 활용하여 중단된 액티비티를 resume했을 때 저장된 데이터를 이용하여 화면을 재구성 할 수 있다.
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
outState.putBoolean("BUNDLE_BOOL",true);
outState.putString("BUNDLE_STRING","hello!");
outState.putInt("BUNDLE_INT",100);
outState.putLong("BUNDLE_LONG",100.0);
super.onSaveInstanceState(outState);
}
위에 작성된 onSaveInstanceState 메소드를 오버라이딩 하여, 번들에 원하는 데이터를 저장하면 된다.
그럼 액티비티가 소멸될 때, 자동으로 해당 데이터가 번들에 저장된다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getBundleData(savedInstanceState)
}
그 후, 만약 해당 액티비티가 다시 생성되면,
onCreate 메소드에 인자로 들어있는 savedInstanceState에 저장한 데이터가 들어있다.
다른 메소드로 번들을 보내 데이터 작업을 처리하겠다.
private void getBundleData(Bundle savedBundle){
if(savedBundle!=null){
String data_str = savedBundle.getString("BUNDLE_STRING");
boolean data_bool = savedBundle.getString("BUNDLE_BOOL");
int data_int = savedBundle.getString("BUNDLE_INT");
long data_long = savedBundle.getString("BUNDLE_LONG");
}
}
위와 같이 bundle 객체에서 데이터를 추출하여 화면을 구성하거나, 재사용하면 된다.
'JAVA > Android' 카테고리의 다른 글
[JAVA][Android] ActivityResultLauncher를 이용한 액티비티 간의 통신 (0) | 2022.07.20 |
---|---|
[JAVA][Android] 데이터 직렬화 (Serialize) (0) | 2022.07.18 |
[JAVA][Android] ImageView 영역에 원하는 radius값을 반영하는 setOutlineProvider (0) | 2022.06.21 |
[JAVA][Android] ProgressBar 디자인 java 코드로 변경하기 (+ 변경 시 비가시화 처리 되는 현상 해결방법) (0) | 2022.05.26 |
[JAVA][Android] ProgressBar 부드럽게 증가/감소 시키기 : ObjectAnimator 활용 (0) | 2022.05.18 |