[안드로이드/코틀린] Activity의 상태 저장 기법

박의진·2022년 9월 13일
0

안드로이드 코틀린

목록 보기
16/16

상태 저장 기법

  • 액티비티가 종료되면 액티비티의 데이터는 모두 사라짐
  • 다시 실행시 복원시켜야 하는 데이터가 있다면 상태저장기법을 이용
  • 화면회전이 대표적인 예) 기본 애깉비티를 종료했다가 화면회전 시킨 새 화면을 나타내는 것

<출처: 새싹 강의자료>

상태를 저장하고 복원하기 위해서 사용하는 라이프사이클 함수

  • 매개변수로 Bundle을 전달한다.
  • onSvaeInstanceState() - 곧 액티비티가 종료되는데 저장해야할 데이터가 있을 때 오버라이드 받아서 호출한다.
  • onRestoreInstanceState() - 다시 실행됐을 때 번들에 저장했던 데이터를 복원할 때 사용한다. 그래서 onCreate()까지 번들을 전달한다.
  • 번들에 데이터 저장 방법
    1) outState.putString("data1", "hello")
    2) outState.putInt("data2", 10)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}

코드 실행

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/countView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="30dp"
        android:textStyle="bold"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="plus"
        android:layout_marginTop="16dp"/>

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"/>

</LinearLayout>
class MainActivity : AppCompatActivity() {

    var count = 0
    lateinit var editView: EditText
    lateinit var countView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        countView = findViewById(R.id.countView)
        val button = findViewById<Button>(R.id.button)
        editView = findViewById(R.id.edit)

        button.setOnClickListener {
            count ++
            countView.text = "$count"
        }
    }

//복원시키는 함수
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        count = savedInstanceState.getInt("count")
        countView.setText("$count")
        editView.setText(savedInstanceState.getString("edit"))
    }

//데이터를 저장시키는 함수
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("count", count)
        outState.putString("edit", editView.text.toString())
    }
}
profile
주니어 개발자의 개발일지

0개의 댓글