Activity是安卓提供给用户与手机之间可交互的界面组件,也是四大组件中比较重要的组件。那么?
Activity从创建到销毁过程是怎么样的呢?
我们从以下几个知识点做分析:
Starting-> running-> poused-> stopped-> killed
关于activity四个状态所在的生命周期:
注:还有一种情况由于系统内存不足可能在Paused状态中直接被系统杀死达到killed状态。
oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()
上面图概括了activity生命周期的各个环节,描述了activity从生成到销毁的过程。
下面在Android Studio上创建一个Empty Activity工程来验证activity生命周期的各个环节
创建一个新的Empty Activity工程
工程名LifeCycle, 语言选择Kotlin。
主活动程序如下,只包含一个Activity创建时调用的初始化方法onCreate()
package com.example.lifecycle
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.lifecycle.ui.theme.LifeCycleTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
LifeCycleTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
LifeCycleTheme {
Greeting("Android")
}
}
其他方法为onstart(),onResume(),onRestart(),onPouse(),onStop()和onDestory()
为了可以调试看到各个生命周期的调用过程,定义一个字符串变量TAG="mytag", 在各个生命周期方法中调用Log.d()输出log。
private val TAG = "mytag"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
LifeCycleTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
Log.d(TAG,"onCreate:")
}
override fun onStart() {
super.onStart()
Log.d(TAG,"OnStart:")
}
override fun onResume() {
super.onResume()
Log.d(TAG,"onResume:")
}
override fun onPause() {
super.onPause()
}
override fun onStop() {
super.onStop()
Log.d(TAG,"onStop:")
}
override fun onRestart() {
super.onRestart()
Log.d(TAG, "onRestart:")
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG,"onDestroy:")
}
在虚拟设备上运行,打开Logcat窗口,跟踪变量mytag。
第一次启动时,过程为oncreate()->onstart()->onResume():
重新调入时,onRestart()->onstart()->onResume():
横竖屏切换时,过程为onStop()->onDestory()->oncreate()->onstart()->onResume():