출처: https://sesac.seoul.kr/ (JetPack과 Kotlin을 활용한 Android App 개발 강의)
Activity launched
: 인텐트에 의해 액티비티 객체가 생성된다. onCreate(), onStart(), onResume()
: onCreate()는 최초에 한번만 호출되지만, onStart(), onResume()는 여러 번 호출될 가능성이 있다. 따라서, 최초의 뷰 출력을 위한 setContentView() 함수는 보통 onCreate()에서 호출한다. (필요에 따라 onStart, onResume에서도 호출할 수 있음.)Activity running
: 활성 상태 onPause()
가 호출되어 일시정지 상태에 있다가 활성 상태로 다시 돌아갈 때는 onResume()
가 호출된다.
onCreate(), onSaveInstanceState(), onRestoreInstanceState()
의 매개변수 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/countView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="30sp"
android:textStyle="bold" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="plus"
android:layout_marginTop="30dp"/>
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"/>
</LinearLayout>
package com.tutorial.c45
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
var count = 0
lateinit var countView: TextView
lateinit var editView: EditText
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"
}
}
}
EditText는 내부적으로 캐싱이 되어서 값이 저장되지만 TextView의 값은 저장되지 않는 것을 확인할 수 있다.
package com.tutorial.c45
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
var count = 0
lateinit var countView: TextView
lateinit var editView: EditText
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 onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("count", count)
outState.putString("edit", editView.text.toString())
}
// 상태 복원
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
count = savedInstanceState.getInt("count")
countView.text = "$count"
editView.setText(savedInstanceState.getString("edit"))
}
}