本文的代码是在主Activity中,重载了几个生命周期函数,在日志中打印出对应的日志信息,有两个按钮,负责启动另外的Activity,并回到主Activity 由此查看日志,来体会生命周期。
MainActivity.kt 文件如下
package com.example.newactivitylifecycletest
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
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.newactivitylifecycletest.ui.theme.NewActivityLifeCycleTestTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("MainActivity","onCreate:Activity 第一次被创建的时候调用")
setContentView(R.layout.activity_main)
val startNormalActivity:Button = findViewById(R.id.startNormalActivity)//后加的代码
startNormalActivity.setOnClickListener{
val intent= Intent(this,NormalActivity::class.java)
startActivity(intent)
}
val startDialogActivity:Button = findViewById(R.id.startDialogActivity)//后加的代码
startDialogActivity.setOnClickListener{
val intent= Intent(this,DialogActivity::class.java)
startActivity(intent)
}
/*setContent {
NewActivityLifeCycleTestTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}*/
}
override fun onStart(){
super.onStart()
Log.d("MainActivity","onStart:在Activity由不可见变为可见的时候调用")
}
override fun onResume(){
super.onResume()
Log.d("MainActivity","onResume:在Activity准备好和用户进行交互的时候调用")
}
override fun onPause(){
super.onPause()
Log.d("MainActivity","onPause:在系统准备去启动或者恢复另一个Activity的时候调用")
}
override fun onStop(){
super.onStop()
Log.d("MainActivity","onStop:在Activity完全不可见的时候调用")
}
override fun onDestroy(){
super.onDestroy()
Log.d("MainActivity","onDestroy:在Activity被销毁之前调用")
}
override fun onRestart(){
super.onRestart()
Log.d("MainActivity","onRestart:在Activity由停止状态变为运行状态之前调用,即重启之后")
}
}
NormalActivity.kt 和DialogActivity.kt 内容不重要,就略过了。
activity_main是主Activity的布局文件,就是声明了两个按钮。
内容如下:
<?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">
<Button
android:id="@+id/startNormalActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start NormalActivity"
tools:ignore="MissingConstraints" />
<Button
android:id="@+id/startDialogActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start DialogActivity"
tools:ignore="MissingConstraints" />
</LinearLayout>
运行起来会看到界面:
这个时候,日志会出现很多内容,我们只需要关注这三个:
2023-11-29 20:46:12.370 32638-32638 MainActivity com...mple.newactivitylifecycletest D onCreate:Activity 第一次被创建的时候调用
2023-11-29 20:46:12.508 32638-32638 MainActivity com...mple.newactivitylifecycletest D onStart:在Activity由不可见变为可见的时候调用
2023-11-29 20:46:12.510 32638-32638 MainActivity com...mple.newactivitylifecycletest D onResume:在Activity准备好和用户进行交互的时候调用
可以想得出来,一个Activity先是被创建,然后是从不可见变为可见,然后是为和用户交互做准备。
这个时候,如果点击startNormalActivity按钮,会出现这个activity,这个就是中间显示出来一段文字。,这个normalActivity会压盖原来的mainActivity,这个时候,日志中会出现:
2023-11-29 21:33:35.867 32638-32638 MainActivity com...mple.newactivitylifecycletest D onPause:在系统准备去启动或者恢复另一个Activity的时候调用
2023-11-29 21:33:36.812 32638-32638 MainActivity com...mple.newactivitylifecycletest D onStop:在Activity完全不可见的时候调用
然后这个时候操作上用鼠标点击虚拟出来的手机的back按钮,我虚拟的是Pixel_API_30,这个时候界面回到了mainActivity(就是有两个按钮的界面)再来看看日志会出现:
2023-11-29 21:38:16.891 32638-32638 MainActivity com...mple.newactivitylifecycletest D onRestart:在Activity由停止状态变为运行状态之前调用,即重启之后
2023-11-29 21:38:16.891 32638-32638 MainActivity com...mple.newactivitylifecycletest D onStart:在Activity由不可见变为可见的时候调用
2023-11-29 21:38:16.893 32638-32638 MainActivity com...mple.newactivitylifecycletest D onResume:在Activity准备好和用户进行交互的时候调用
这个时候操作上点击第二个按钮:StarDialogActivity,这个DialogActivity由于是对话框式的,故并没有压盖mainActivity,点击后出现界面如下:
这个时候日志中出现:
2023-11-29 21:41:55.247 32638-32638 MainActivity com...mple.newactivitylifecycletest D onPause:在系统准备去启动或者恢复另一个Activity的时候调用
这个时候,如果点击虚拟出来的手机的back箭头,就回到了mainActivity,这个时候日志会出现:
2023-11-29 21:44:26.052 32638-32638 MainActivity com...mple.newactivitylifecycletest D onResume:在Activity准备好和用户进行交互的时候调用
对理解Activity的生命周期有一定的帮助。