Varje Android-app går igenom olika tillstånd under sin livstid. Android hanterar dessa genom aktivitetslivscykeln. Det är viktigt att förstå dessa för att skapa stabila och responsiva appar.
Android hanterar en aktivitet (Activity) genom följande tillstånd:
onCreate()
↓
onStart()
↓
onResume() ---> [Interaktiv fas]
↓ ↓
onPause() <--- (Ny aktivitet)
↓
onStop()
↓
onDestroy()
package com.example.lifecycleapp
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("Lifecycle", "onCreate körs")
}
override fun onStart() {
super.onStart()
Log.d("Lifecycle", "onStart körs")
}
override fun onResume() {
super.onResume()
Log.d("Lifecycle", "onResume körs")
}
override fun onPause() {
super.onPause()
Log.d("Lifecycle", "onPause körs")
}
override fun onStop() {
super.onStop()
Log.d("Lifecycle", "onStop körs")
}
override fun onDestroy() {
super.onDestroy()
Log.d("Lifecycle", "onDestroy körs")
}
}
Log.d() för att skriva ut en logg när respektive livscykelmetod körs.När en aktivitet startas om (t.ex. vid skärmrotation) kan data gå förlorad. För att spara data kan vi använda ViewModel.
import androidx.lifecycle.ViewModel
class CounterViewModel : ViewModel() {
var count = 0
}
Använd ViewModel i en aktivitet:
import androidx.activity.viewModels
import android.os.Bundle
import android.widget.TextView
import androidx.activity.ComponentActivity
import androidx.lifecycle.ViewModel
class MainActivity : ComponentActivity() {
private val counterViewModel: CounterViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView = findViewById<TextView>(R.id.textView)
textView.text = "Antal klick: ${counterViewModel.count}"
}
}
Om du använder Jetpack Compose, kan du observera livscykeln via LaunchedEffect:
@Composable
fun LifecycleObserver() {
LaunchedEffect(Unit) {
println("Composable initieras")
}
}
Detta täcker grunderna i Android-appens livscykel! Nästa steg är att optimera tillståndshantering och resurshantering i Android-appar.