π‘ μ°μνν ν¬μ½μ€μμ νλ©΄ νμ§ μ λ°μ΄ν° μ μ§νλ λ°©λ²μ λν΄ νμ΅ν λ΄μ©μ κΈ°λ‘νμμ΅λλ€ !
κ°μ
- λλ°μ΄μ€ νλ©΄μ νμ νλ©΄ λμ μΌλ‘ μμ±ν λ°μ΄ν°κ° μ΄κΈ°νλ©λλ€.
- μ΄λ λνμ μΈ μ‘ν°λΉν°κ° μ’
λ£λλ μν©λ€ μ€ 3λ²μ§Έμ ν΄λΉν©λλ€.
- λ€λ‘κ°κΈ°λ‘ μ’ λ£
- finish() λ©μλ νΈμΆ
- μμ€ν μ μν μ’ λ£
- 3λ²μ§Έ κ²½μ°λ ν ν€λ₯Ό λλ¬ νλ©΄μ 보μ΄μ§ μμ μνλ‘ μ₯μκ° κ²½κ³Όν λ, νλ©΄μ νμ ν λ λ°μν©λλ€.
- μ΄ λ μ‘ν°λΉν° μλͺ μ£ΌκΈ°μ λ°λΌμ onDestory()κ° νΈμΆλλ©° μ’ λ£λκ³ , μλ‘ μμ±λλ©΄μ onCreate()λ₯Ό νΈμΆν©λλ€.
- μ΄ λ κΈ°μ‘΄μ μ μ§νκ³ μλ UI μνμ λμ λ°μ΄ν°κ° μ΄κΈ°ν λλ λ¬Έμ κ° λ°μν©λλ€.
- μ΄λ₯Ό λ°©μ§νκΈ° μν΄ onSaveInstanceState()μ onRestoreInstanceState()λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μν μ μ₯ λ° λ³΅μ
onSaveInstanceState()
- λ©μλλ Activityκ° νκ΄΄λκΈ° μ μ νΈμΆλλ©° Bundle κ°μ²΄μ μν μ 보λ₯Ό μ μ₯ν μ μμ΅λλ€.
- ν΄λΉ μ 보λ₯Ό onCreate()μ onRestoreInstanceState()λ‘ μ λ¬ν μ μμ΅λλ€.
onRestoreInstanceState()
- μ μ₯λ μνλ₯Ό savedInstanceState(Bundle)λ‘ λ°μμ μ μ₯λ μνλ₯Ό 볡μν©λλ€.
- onStart() μ΄νμ νΈμΆλλ©°, μ΄μ μ μ μ₯λ μν λ°μ΄ν°λ₯Ό 볡μν λλ§ μ€νλ©λλ€.
- μ¦ Activityκ° μ²μ μμ±λ μμ μμλ νΈμΆνμ§ μμ΅λλ€.
onCreate()μμλ?
- onCreate()μμλ savedInstanceStateλ₯Ό λ°μμ μνλ₯Ό 볡μν μ μμ΅λλ€.
- νμ§λ§ μ΄ κ²½μ°λ nullμΈ κ²½μ°λ₯Ό ν¬ν¨νλ©°, Activityκ° μ²μ μμλ κ²½μ°λ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
- λ°λ©΄μ onRestoreInstanceState()λ 볡μ λ μνμΌ λλ§ νΈμΆλ©λλ€.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// μν 볡μ
if (savedInstanceState != null) {
val savedText = savedInstanceState.getString("saved_text")
// 볡μλ μνλ₯Ό UIμ λ°μ
findViewById<TextView>(R.id.textView).text = savedText
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// μν μ μ₯
val textToSave = findViewById<TextView>(R.id.textView).text.toString()
outState.putString("saved_text", textToSave)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
// μν 볡μ
val savedText = savedInstanceState.getString("saved_text")
findViewById<TextView>(R.id.textView).text = savedText
}
}
ViewModel νμ©
- ViewModelμ νλ©΄ νμ κ³Ό κ°μ κ΅¬μ± λ³κ²½ μμλ λ°μ΄ν°κ° μ μ§λλλ‘ λμμ£Όλ Android Architecture Componentμ λλ€.
- ViewModelμ μ‘ν°λΉν°λ νλκ·Έλ¨ΌνΈκ° μ¬μμ±λ λλ λ°μ΄ν°κ° μ μ§λλ©°, UI κ΄λ ¨ λ°μ΄ν°λ₯Ό μ μ₯νλ λ° μ ν©ν©λλ€.
νλ©΄ νμ μ²λ¦¬ λ°©λ² μ μ΄
- μμ νλ©΄ νμ μ μνλ₯Ό 무쑰건 μ μ§νλ λ°©λ²μ΄ μμ΅λλ€.
- μ‘°κΈ κ·Ήλ¨μ μΌ μλ μμ§λ§, κ΅³μ΄ νλ©΄ νμ μ΄ νμμλ μ±μμ νλ©΄ νμ μ μ μ΄νμ¬ λΆνμν λ‘μ§μ μ κ±°ν μ μμ΅λλ€.
configChanges
- AndroidManifest.xmlμμ configChanges μμ±μ μ€μ νλ©΄ νλ©΄ νμ μ μ‘ν°λΉν°κ° μ¬μμ±λμ§ μλλ‘ ν μ μμ΅λλ€.
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize">
</activity>
μνμ±
- μ΄ μμ±μ μΌλ°μ μΌλ‘ κΆμ₯λμ§ μμ΅λλ€.
- νλ©΄ νμ μ μλμΌλ‘ Activityλ₯Ό μ¬μμ±νμ¬ νλ©΄μ μ΅μ ννλ Androidμ κΈ°λ³Έ λμμ μ°ννκ³ μμ΅λλ€.
Fragmentμμ λμνκΈ°
- Fragmentμμλ Activityμ μ μ¬νκ² onSaveInstanceState() λ©μλλ₯Ό μ¬μ©νμ¬ μνλ₯Ό μ μ₯νκ³ λ³΅μν μ μμ΅λλ€.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// μ΄μ μνκ° μμΌλ©΄ 볡μ
savedInstanceState?.let {
val savedText = it.getString("saved_text")
findViewById<TextView>(R.id.textView).text = savedText
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// μν μ μ₯
outState.putString("saved_text", "Hello, World!")
}
override fun onViewStateRestored(savedInstanceState: Bundle?) {
super.onViewStateRestored(savedInstanceState)
// μν 볡μ
savedInstanceState?.let {
val savedText = it.getString("saved_text")
view?.findViewById<TextView>(R.id.textView)?.text = savedText
}
}
- Fragmentλ Activityμ λ§μ°¬κ°μ§λ‘ μλ‘ μμ±λ μνλΌλ©΄ onCreate(), μνλ₯Ό 볡μν λλ onViewStateRestored()λ₯Ό νμ©ν μ μμ΅λλ€.
Fragment μ¬μμ± λ°©μ§
- Fragmentμμ retainInstance μ΅μ μ ν΅ν΄μ Fragmentκ° Activityκ° μ¬μμ± λμ΄λ νκ΄΄λμ§ μλλ‘ ν μ μμ΅λλ€.
class MyFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true // νλ©΄ νμ μ Fragment μ μ§
}
}
μ 리
- Androidμμ νλ©΄ νμ μ μ‘ν°λΉν° μν μ μ§λ₯Ό μν΄ onSaveInstanceState()λ₯Ό νμ©ν μ μμ΅λλ€.
- νΉλ³ν κ²½μ°λ₯Ό μ μΈνκ³ configChangesλ₯Ό μ¬μ©νλ κ²μ μ§μνκ³ , Androidκ° μ 곡νλ κΈ°λ³Έ λμμ νμ©νμ¬ μνλ₯Ό κ΄λ¦¬νλ κ²μ΄ μ’μ΅λλ€.