【11】Activity的生命周期

其实Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity 的集合,这个栈也被称作返回栈(back stack)。栈是一种后进先出的数据结构,在默认情况 下,每当我们启动了一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。而每当我 们按下Back键或调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,前 一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。

01.状态

运行状态,暂停状态,停止状态,销毁状态

02.Activity的生存期

onCreate():这个方法你已经看到过很多次了,我们在每个Activity中都重写了这个方 法,它会在Activity第一次被创建的时候调用。你应该在这个方法中完成Activity的初始化 操作,比如加载布局、绑定事件等。

onStart():这个方法在Activity由不可见变为可见的时候调用。

onResume():这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一 定位于返回栈的栈顶,并且处于运行状态。

onPause():这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常 会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执 行速度一定要快,不然会影响到新的栈顶Activity的使用。

onStop():这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区 别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执 行,而onStop()方法并不会执行。

onDestroy():这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状 态。 onRestart():这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity 被重新启动了。

以上7个方法中除了onRestart()方法,其他都是两两相对的

03.生命周期的代码实战

MainActivity:

package com.example.activitylifecycletest

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import android.widget.Button

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val normalButton: Button =findViewById(R.id.startNormalActivity)
        normalButton.setOnClickListener {
            val intent= Intent(this,NormalActivity::class.java)
            startActivity(intent)
        }

        val dialogButton:Button=findViewById(R.id.startDialogActivity)
        dialogButton.setOnClickListener {
            val intent=Intent(this,DialogActivity::class.java)
            startActivity(intent)
        }
    }


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

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

    override fun onPause() {
        super.onPause()
        Log.d("tag","onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.d("tag","onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("tag","onDestroy")
    }

    override fun onRestart() {
        super.onRestart()
        Log.d("tag","onRestart")
    }
}

NormalActivity:
package com.example.activitylifecycletest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class NormalActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_normal)
    }
}
DialogActivity:
package com.example.activitylifecycletest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class DialogActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dialog)
    }
}

 

 

04.Activity的启动模式

standard是Activity默认的启动模式,在不进行显式指定的情况下,所有Activity都会自动使用这种启动模式

在该模式中,每启动一个新活动,都会创建一个新的实例,并在任务栈中入栈,处于栈顶的位置。假设你不停地进入同一个活动,你点击了十次,就要返回十次才能退出程序,因为你在返回栈中创造了十个相同的实例,尽管活动是一样的。

singleTop模式:在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例,否则就创建新活动并压入栈顶。

通过修改 android:launchMode="singleTop"来确认启动模式,其他模式以此类推

 

singleTask模式:每次启动该Activity时, 系统首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在则直接使用该实例, 并把在这个Activity之上的所有其他Activity统统出栈,如果没有发现就会创建一个新的 Activity实例。

singleInstance模式:最特殊的模式,系统为该模式的活动分配一个独立的任务栈,该任务栈有且只有一个该活动实例。也就是说,如果已经创建过目标活动实例,那么将不会创建新的任务栈,而是唤醒之前创建过的活动实例。

05.启动Activity

companion object 后续重点介绍下

 

06. 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】03-转换器和预估器、K-近邻算法、朴素贝叶斯算法、决策树等算法知识

分类算法 一、sklearn转换器和预估器 1 转换器 - 特征工程的父类 fit_transform()fit() 计算 每一列的平均值、标准差transform() (x - mean) / std进行最终的转换 2 估计器(sklearn机器学习算法的实现) 估计器(estimator)–一类实现算法的API 实例化一个estimatorestimat…

剑指offer JZ23 链表中环的入口结点

Java JZ23 链表中环的入口结点 文章目录Java JZ23 链表中环的入口结点一、题目描述二、hash法,记录第一次重复的结点三、快慢指针法使用hash法和快慢指针法解决剑指offer 第JZ23 链表中环的入口结点的问题。 一、题目描述 给一个长度为n链表,若其中包含环…

【新】(2023Q2模拟题JAVA)华为OD机试 - 寻找链表的中间结点

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:寻找链表的中间结点 题目 给…

利用自动化平台可以做的那亿点事 |得物技术

前言 相信大家对接口自动化已经不陌生了,这是几乎我们每个迭代都会投入的事情,但耗费了这么多精力去编写和维护,实际的收益如何呢?如果收益不好,是不是说明我们自动化 case 的实现方式、使用方式还有改进的地方呢&…

第09章_子查询

第09章_子查询 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…

【ABAP】ME55双击跳转MD04增强

最近收到了一个需求,大致的要求是在标准报表ME55的ALV短文本列双击后跳转到MD04的详情。刚开始没有找到增强点想用间接的办法实现,在ME55上增加一列,展示想看到的内容,最后由于需要展示的内容太多,该方案被舍弃。 经过…

深度学习实战19(进阶版)-SpeakGPT的本地实现部署测试,基于ChatGPT在自己的平台实现SpeakGPT功能

大家好,我是微学AI,今天给大家带来SpeakGPT的本地实现,在自己的网页部署,可随时随地通过语音进行问答,本项目项目是基于ChatGPT的语音版,我称之为SpeakGPT。 ChatGPT最近大火,其实在去年12月份…

SpringBoot @Transactional事务详解

事务用处及作用 事务主要是保证数据统一、一致的一种操作。 详细的一些专用术语在此这里不会说太多,如需了解自行百度了(还不是枯燥乏味),大致就是这意思。 事务用处 比如坤坤,坤坤拿着100元去买鸡,一个…

JAVA ---程序流程

(一)引言 在生活中,我们经常会发现在医院或者官方机构办事是要走流程的,同样的程序必须能操控自己的世界,在执行过程中作出判断与选择。在Java中,通过流程控制语句可实现程序执行流程的随意控制&#xff0…

C#中使用I/O文件流

流,即是二进制数值,文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。 在 .NET 中,System.IO 命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。 这些命名空间还包含对文件执行压…

Android开发 Intent

1. Intent 在组件之间传递信息,一般需要设置发送方,接收方和数据。 下图是Intent 的常用属性: 2. Intent分类 1)显式Intent:精确匹配发送方和接收方 方法一: startActivity(new Intent(this,MainActiv…

USB抓包分析

1、USB传输协议基本概念 一个传输(控制、批量、中断、等时):由多个事务transaction组成; 一个事务transaction (IN、OUT、SETUP):由一多个包Packet组成。USB数据在主机与usb设备间被传输,之间的关联叫做管道pipe。一个USB设备可以…

图片转字符画

目录一、字符画二、制作方式一、字符画 字符画:用字符填充创作的人物或动物图片,就像下面这样: 二、制作方式 1.使用Ps的文字工具和蒙版工具来实现 可以看下YouTube上这个教程视频:Photoshop CS6 Tutorial: How to Make an Edi…

企业电子招投标采购系统源码之首页设计

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部…

详解TCP、HTTP中的保活机制 | Keepalive和Keep-Alive

目录 🌲 HTTP 的 Keep-Alive 🌲 TCP 的 Keepalive 🌲 最后总结 🌲 参考资料 TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗? 这是个好问题,应该有不少人都会搞混,因为这两个东西看上…

DNS协议--笔记

引自: 什么是DNS? - 知乎 (zhihu.com) 超详细 DNS 协议解析 - 知乎 (zhihu.com) IP 地址:一长串能够唯一地标记网络上的计算机的数字域名:又称网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组…

rust语言精要

rust基本组成 编译器:Rust是一门静态编译型语言。Rust官方的编译器叫rustc,负责将 Rust源代码编译为可执行文件或其他库文件(.a、.so、.lib、.dll等)。特点是跨平台的,后端用了LLVM。 核心库和标准库 Rust语言的语法由…

Prometheus之PromQL语法详解及使用方法

本文是向大家介绍Prometheus中PromQL的查询语法以及常用语句,可以帮助大家理解和掌握Prometheus的查询语言。1、简介Prometheus是通过指标名称(metrics name)以及对应的一组标签(labelset)唯一定义一条时间序列。指标名…

如何选择Facebook的各种广告形式来获取用户?

Facebook广告是吸引潜在客户的重要工具,但盲目投放广告却很难达到理想效果。在选择广告格式时,需要考虑到品牌和业务目标,以及目标受众的特征和偏好。下面介绍8种Facebook广告格式,不论您是想用视频、图片或文字,还是结…

云端Docker搭建ABY库以及本地CLion使用

文章目录ABY的搭建以及使用前言ABY库的下载、安装及测试CLion配置后续杂项项目改名使用其他的库最后ABY的搭建以及使用 前言 仅做记录,仅供参考,不同人有不同的使用方式命令手敲,可能有错,自己辨识勿问,我懂的也不多…