验证和观察Activity生命周期【Intent跳转】

news2024/11/18 15:33:28

创建测试项目,验证和观察Activity生命周期,使用Intent实现Activity之间的跳转:

1、创建TestActivity项目;

2、创建SecondActivity及相应布局;

3、在MainActivity和SecondActivity中重写onStart()、onResume()等生命周期事件方法,在其中使用Log输出日志信息;

4、在MainActivity中编写点击按钮的onClick()方法,使用Intent打开SecondActivity;

5、运行程序,观察在Activity的创建、显示、关闭、切换等恢复显示等过程中各个生命周期事件方法的触发情况。


0.创建项目

根据要求随便创建一个项目即可

1.创建SecondActivity及相应布局

在Android Studio中,右键点击项目的app目录,选择“New” > “Activity” > “Empty Activity”。

在这里插入图片描述

命名新的Activity为SecondActivity,并在创建布局文件时选择activity_second.xml

在这里插入图片描述

activity_second.xml定义布局

以下是一个简单的示例,包含一个TextView和一个Button:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:gravity="center">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is SecondActivity"
        android:textSize="18sp"
        android:textColor="#000"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go Back"
        android:id="@+id/backButton"/>

</LinearLayout>

实现效果

在这里插入图片描述

2.重写生命周期方法

导入TAG,并设置常量标签

请确保导入android.util.Log类,并设置一个常量标签

    private val TAG = "SecondActivity"

MainActivitySecondActivity中,在MainActivitySecondActivity中重写需要观察的生命周期方法(例如onStart()onResume()等)。

并在这些方法内部使用Log输出日志信息

@Override
protected void onStart() {
    super.onStart();
    Log.d(TAG, "onStart() called");
}

@Override
protected void onResume() {
    super.onResume();
    Log.d(TAG, "onResume() called");
}

直接复制进入Android Studio将会自动转换!!

在这里插入图片描述

转换的代码

    override fun onStart() {
        super.onStart()
        Log.d(TAG, "onStart() called")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume() called")
    }

MainActivity代码

package com.leo.activity_1

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.ComponentActivity


class MainActivity : ComponentActivity() {
    private val TAG = "MainActivity"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main)
    }
    override fun onStart() {
        super.onStart()
        Log.d(TAG, "onStart() called")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume() called")
    }
    fun openSecondActivity(view: View?) {
        val intent = Intent(this, SecondActivity::class.java)
        startActivity(intent)
    }
}

SecondActivity代码

package com.leo.activity_1

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View

class SecondActivity : AppCompatActivity() {
    private val TAG = "SecondActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.second)
    }
    override fun onStart() {
        super.onStart()
        Log.d(TAG, "onStart() called")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume() called")
    }
    fun goBack(view: View?) {
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
    }
}

3.打开SecondActivity

添加按钮

activity_main.xml中添加一个按钮,为按钮添加android:onClick="openSecondActivity"属性,这将关联按钮点击事件与openSecondActivity方法

如果activity_main.xml不存在,请自行创建

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Open Second Activity"
        android:id="@+id/openSecondButton"
        android:layout_centerInParent="true"
        android:onClick="openSecondActivity" />

</RelativeLayout>

添加方法

在MainActivity中编写按钮的onClick()方法:

    public void openSecondActivity(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }

ktlion代码

    fun openSecondActivity(view: View?) {
        val intent = Intent(this, SecondActivity::class.java)
        startActivity(intent)
    }

4.运行程序并观察生命周期事件:

  • 在Android Studio中,点击绿色的运行按钮以运行你的应用程序。
  • 在模拟器或连接的Android设备上,点击按钮以触发跳转到SecondActivity
  • 观察Logcat窗口中的输出,查看生命周期方法的调用情况,了解Activity的创建、显示、关闭和切换过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果出现java.lang.RuntimeException: Unable to start activity ComponentInfo{com.leo.activity_1/com.leo.activity_1.SecondActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.——出现了不兼容的问题

需要点击mainifests,修改theme为

@style/Theme.AppCompat.DayNight.DarkActionBar

在这里插入图片描述

实现效果
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Momentum Contrast for Unsupervised Visual Representation Learning 论文学习

1. 解决了什么问题&#xff1f; 非监督学习在自然语言处理非常成功&#xff0c;如 GPT 和 BERT。但在计算机视觉任务上&#xff0c;监督预训练方法要领先于非监督的方法。这种差异可能是因为各自的信号空间不同&#xff0c;语言任务有着离散的信号空间&#xff08;单词、短语等…

机器学习总结

对以下文章机器学习总结 什么是深度学习?最易懂的机器学习入门文章-CSDN博客 人工智能和机器学习之间的关系 人工智能是一个最宽泛的概念&#xff0c;是一个研究领域&#xff0c;同时也是一个实现目标&#xff0c;而机器学习则是实现这一目标的一类方法。深度学习只是机器学…

N9000A 安捷伦Agilent信号分析仪

181/2461/8938利用先进的低成本信号分析工具&#xff0c;轻松完成基本的信号表征 借助可选的内置跟踪发生器&#xff0c;可以执行经济高效的激励响应测量 通过 X 系列测量应用软件增添重要功能 可以在射频和微波教育实验室中与培训套件结合使用&#xff0c;通过实践练习加深…

基于微信小程序的数学辅导系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉…

wepack打包生产环境使用http-proxy-middleware做api代理转发的方法

首先安装http-proxy-middleware依赖&#xff0c;这个用npm和yarn安装都可以。 然后在express服务器的代码增加如下内容&#xff1a; const express require("express"); const app express(); const { createProxyMiddleware, fixRequestBody, } require("h…

初识C语言——详细入门(系统性学习day4)

目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍&#xff1a; 特点&#xff1a; 基本构成&#xff1a; 二、认识C语言程序 标准格式&#xff1a; 简单C程序&#xff1a; 三、基本构成分类详细介绍 &#xff08;1&#xff09;关键字 &#xff08;2&#xf…

数据通信——应用层(域名系统)

引言 TCP到此就告一段落&#xff0c;这也意味着传输层结束了&#xff0c;紧随其后的就是TCP/IP五层架构的应用层。操作系统、编程语言、用户的可视化界面等等都要通过应用层来体现。应用层和我们息息相关&#xff0c;我们使用电子设备娱乐或办公时&#xff0c;接触到的就是应用…

命令执行(rce)

1.命令与代码执行原理 命令执行原理 参数给变量未经过滤&#xff0c;直接使用了不安全的函数处理了变量 127.0.0.1&&ipconfig 有漏洞 常用的函数 assert,system,exec,shell_exec, eval,(反单引号&#xff09; 代码执行原理 参数给变量未经过滤&#xff…

Windows如何将软件安装在移动硬盘上?

为什么要在Windows的移动硬盘上安装软件&#xff1f; 现在一些软件需要占用的硬盘空间越来越多&#xff0c;我们下载的软件也越来越多&#xff0c;硬盘的可用存储空间自然的也就越来越小了。当您在下载新软件时&#xff0c;就会提示您磁盘空间不足&#xff0c;但又不能删除之…

AIGC专栏7——EasyPhoto 人像训练与生成原理详解

AIGC专栏7——EasyPhoto 人像训练与生成原理详解 学习前言源码下载地址为什么是LoraEasyPhoto的训练流程1、数据的预处理a、人像排序i、人脸特征向量提取过程ii、人脸偏移角度计算iii、人像排序 b、人像分割与修复i、人像分割ii、图像修复与超分处理 2、Lora模型训练a、训练的基…

PyTorch实战:常用卷积神经网络搭建结构速览

目录 前言 常用卷积神经网络 1.AlexNet 2.VGGNet 3.GoogLeNet 4.ResNet 总览 前言 PyTorch可以说是三大主流框架中最适合初学者学习的了&#xff0c;相较于其他主流框架&#xff0c;PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是&#xff0c;框架…

收藏!一个详细完整的公司局域网搭建案例

你们好&#xff0c;我的网工朋友。 什么是局域网&#xff1f; 所谓局域网(Local Area Network&#xff0c;简称LAN)&#xff0c;就是用于将有限范围内&#xff08;例如一个实验室、一层办公楼或者校园&#xff09;的各种计算机、终端与外部设备互联成网。 那公司局域网怎么建…

ScrollView如何裁剪粒子特效

1&#xff09;ScrollView如何裁剪粒子特效 2&#xff09;Unreal在移动设备中无法使用Stat命令获取到GPU Thread的耗时 3&#xff09;Unity中如何看到相机视野范围内的剔除结果 这是第354篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、…

Spring Cloud Alibaba Gateway 简单使用

文章目录 Spring Cloud Alibaba Gateway1.Gateway简介2. 流量网关和服务网关的区别3. Spring Cloud Gateway 网关的搭建3.1 Spring Cloud Gateway 配置项的说明3.2 依赖导入3.3 配置文件 Spring Cloud Alibaba Gateway 1.Gateway简介 Spring Cloud Gateway是一个基于Spring F…

图片分割处理(以玉米颗粒的图片分割为例)

问题&#xff1a; 为完成玉米颗粒分类任务&#xff0c;现需要处理训练图片&#xff0c;将以下图片中的玉米颗粒进行分割&#xff1a; 目标&#xff1a; 操作步骤&#xff08;完整代码附在最后&#xff0c;该部分为解释说明&#xff09; 一、提取通道并进行二值化 # 提取蓝…

CCC数字钥匙设计【BLE】 --建立安全测距

1、建立安全测距Establish Secure Ranging 车端总共有三种建立安全测距的方式&#xff0c;具体如下&#xff1a; 1) Optimal Flow 2) Sub-Optimal Flow 3) Ranging Recovery Flow 为了确定建立安全测距需要执行哪条流程&#xff0c;车辆需要进行以下流程选择。当车辆和设备…

速码!!BGP最全学习笔记:BGP路径属性与选路原则

BGP路径属性 1、路径属性分类 公认属性&#xff1a;所有BGP路由器都必须能够识别的属性 公认必遵&#xff08;Well-known Mandatory&#xff09;&#xff1a;必须包括在每个Update消息里。公认任意&#xff08;Well-known Discretionary&#xff09;&#xff1a;可能包括在某…

数学公式测试

MVP变换 MVP变换用来描述视图变换的任务&#xff0c;即将虚拟世界中的三维物体映射&#xff08;变换&#xff09;到二维坐标中。 MVP变换分为三步&#xff1a; 模型变换(model tranformation)&#xff1a;将模型空间转换到世界空间&#xff08;找个好的地方&#xff0c;把所…

4年北漂之路,从软件测试外包到外企的一点小心得

4年前&#xff0c;我独自一人拖着行李箱来到了北京&#xff0c;成为了一名北漂&#xff0c;离开了校园的庇护&#xff0c;只身一人想要在这片陌生的地方闯出一番名堂&#xff0c;可最后却不得人意&#xff0c;面临着和所有北漂群体的共同困局&#xff0c;没有任何归属感&#x…

【Python Fastapi】js上传文件,fastapi处理,js显示回传信息

python from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from typing import List import requestsapp FastAPI()# 配置静态文件目录 app.mount("/static"…