当前位置: 首页 > news >正文

《第一行代码:Android》第三版-3.4.4体验Activity的生命周期

本文的代码是在主Activity中,重载了几个生命周期函数,在日志中打印出对应的日志信息,有两个按钮,负责启动另外的Activity,并回到主Activity 由此查看日志,来体会生命周期。

MainActivity.kt 文件如下

package com.example.newactivitylifecycletestimport 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.NewActivityLifeCycleTestThemeclass 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 themeSurface(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"><Buttonandroid:id="@+id/startNormalActivity"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Start NormalActivity"tools:ignore="MissingConstraints" /><Buttonandroid: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的生命周期有一定的帮助。

http://www.lryc.cn/news/248062.html

相关文章:

  • 用java编写一个网络聊天室
  • Opencv颜色追踪
  • 计算机网络——网络可靠性及网络出口配置
  • 在虚拟机搭建nignx,和使用本地访问nginx的情况
  • Java数据结构之《直接插入排序》问题
  • 向量场中的几个恒等式
  • 异行星低代码平台--第三方插件对接:钉钉平台对接(一)
  • MyBatis使用教程详解<下>
  • C++基础 -17-继承中 基类与派生构造和析构调用顺序
  • uniapp实现表单弹窗
  • Ajax 是什么? 如何创建一个 Ajax?
  • 【LeetCode】101. 对称二叉树
  • O-Star|再相识
  • 最新PHP熊猫头图片表情斗图生成源码
  • 子虔科技出席2023WAIC“智能制造融合创新论坛”
  • 递归算法学习——二叉树的伪回文路径
  • Android端极致画质体验之HDR播放
  • 【Java SE】带你在String类世界中遨游!!!
  • Android: ListView + ArrayAdapter 简单应用
  • 前端:实现二级菜单(点击实现二级菜单展开)
  • Spark-java版
  • RabbitMQ消息模型之Work Queues
  • vue3+ts 实现时间间隔选择器
  • PTA 魔法优惠券
  • P8A110-A120经典赛题
  • 文件基础知识
  • 二叉树OJ题之二
  • MySql表中添加emoji表情
  • 【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库
  • 2023最新的软件测试热点面试题(答案+解析)