Home 안드로이드에서 데이터 보존하기
Post
Cancel

안드로이드에서 데이터 보존하기

안드로이드 앱 개발을 하다 보면 화면 회전이나 메모리 문제로 인해 액티비티가 파괴되었다가 다시 생성되는 경우가 있다 이러한 상황에서는 앱의 데이터가 초기화되기에 처음부터 데이터를 입력해야 하기에 사용자의 불편을 초래할 수 있다 그래서 이번 글에서는 onSaveInstanceState와 onRestoreInstanceState 메서드를 활용해 이러한 상황에서도 데이터를 안전하게 보존하는 방법을 알아보려고 한다

구현 방법

안드로이드에서 화면 회전이나 액티비티가 파괴될 때 데이터를 보존하는 방법은 savedInstanceState를 사용하는 것으로 savedInstanceState를 통해 데이터를 보존하는 법은 크게 두 가지가 있는데

onSaveInstanceState 사용

우선 공통적인 것부터 살펴보면 onSaveInstanceState 메서드는 액티비티가 파괴되기 전에 호출되며 현재 상태를 저장할 수 있는 기회를 제공한다 그래서 이를 이용해 데이터를 저장하면 된다

1
2
3
4
5
override fun onSaveInstanceState(outState: Bundle) {
    // 현재 숫자 값을 저장
    outState.putInt("age", age)
    super.onSaveInstanceState(outState)
}

위 코드에서는 age라는 변수의 값을 outState에 저장하는데 이렇게 하면 액티비티가 파괴되었다가 다시 생성될 때 이 값을 복원할 수 있게 된다

savedInstanceState 사용

액티비티가 다시 생성될 때 savedInstanceState를 통해 이전에 저장된 데이터가 Bundle 형태로 전달되게 되는데 이는 우리가 항상보던 onCreate에서 인자로 받는 그 객체다

1
2
3
4
5
6
7
8
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    if (savedInstanceState != null) {
        age = savedInstanceState.getInt("age")
    }
}

여기서 주의해야 할 점은 null이 들어올 수도 있기에 null체크를 해줘야 한다

onRestoreInstanceState 사용

다음으로 소개할 방법은 onRestoreInstanceState를 사용하는 방법으로 onRestoreInstanceState는 onCreate 메서드가 호출된 직후에 호출되며 savedInstanceState를 통해 이전에 저장된 데이터를 복원할 수 있다

1
2
3
4
5
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    // 저장된 숫자 값을 복원
    number = savedInstanceState.getInt("number")
}

그렇다면 onCreate에서와 차이점은 무엇이냐 할 수 있는데 이 메서드는 액티비티가 복구할 데이터가 있는 경우에만 호출되기에 onRestoreInstanceState에서는 null 체크를 할 필요가 없다는 차이점이 있다

This post is licensed under CC BY 4.0 by the author.