Android学习笔记 ---- 四大组件之 Activity

2023-05-16

1.Activity的概念与Activity的生命周期图:

Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!

2,Activity生命周期中所涉及到的回调函数(我们不能够去主动调用):

 public class Activity extends ApplicationContext {

//onCreate()必须重写,必须调用 setContentView() 加载界面布局
     protected void onCreate(Bundle savedInstanceState);  

     protected void onStart();

     protected void onRestart();

     protected void onResume();

//表示离开当前界面,注意不总是意味这销毁界面
     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }

整个生命周期(entire lifetime):在onCreate() 与 onDestory()之间,在onCreate()中获取所需的资源,在onDestory()中释放所有占有的资源。

可见生命周期(visible lifetime): 在onStart() 与 onStop()之间,在这期间可以拥有所有资源,例如可以在onStart() 中注册广播,可以在onStop()中注销广播。

前台生命周期(foreground lifetime):在onResume() 与 onPause()之间,在这期间当前activity占据屏幕,处于正在与用户交互的状态,当设备休眠或者其他活动获取焦点时onPause()会被调用。由于可能会高频率的切替状态,所以这两个回调函数中尽量不要有太多逻辑处理。

3.Activity的创建流程

4, 启动activity的方式

1)  startActivity(intent)

intent中可显式的指定具体要启动的activity,也可以指定action动作。

2) startActivityForResult(intent, requestCode)

启动一个activity并返回信息。源activity调用startActivityForResult(intent, requestCode)启动目的activity,并重写onActivityResult(int requestCode, int resultCode,  Intent  data)方法,以接收处理返回的数据信息;目的activity通过setResult(int resultCode,  Intent data)来返回数据信息供onActivityResult()处理(setResult()之后一般会调用finish()方法来结束目的activity)。

requestCode:标记调用源,例如同一个activity的两个button点击会启动同一个目的activity, 但是所执行的动作不一样,此时就需要requestCode来区别动作源。

resultCode:标记结果返回动作。

5,关闭Activity

通过调用finish()方法来结束一个activity。

activity1通过startActivityForResult()方法启动activity2时,可以在activity1中调用finishActivity(int requestCode)来结束activity2。

6,Activity的四种加载模式

7,Activity的状态保存

当activity被暂停或者停止的时候,它所有的信息和状态是被保留的,因为此时的activity对象还被保存在内存中。当该activity返回前台时,之前的信息和状态还可以恢复。然而,当系统清理内存时,其中的activity对象也就被销毁了,如果此时想保存activity的信息和状态该怎么办呢?----可以重写回调方法:onSaveInstanceState() (具体用法不作描述。),此时重建的时候会调用onRestoreInstanceState()。

onSavedInstanceState()和onRestoreInstanceState()并不是activity生命周期的方法。

onSaveInstanceState()会在onPause()或onStop()之前执行,onRestoreInstanceState()会在onStart()和onResume()之间执行。

当应用遇到意外情况(内存不足,用户直接按home键)由系统直接销毁一个Activity时,onSaveInstanceState()就会调用,但是当用户主动销毁activity,如按back键,或直接执行finish(),这种情况下onSaveInstanceState()就不会执行,因为这种情况下,用户的行为决定了不需要保存Activity的状态。

那么onRestoreInstanceState()会跟onSaveInstanceState()成对出现吗?  答案是不会成对出现,onSaveInstanceState()需要调用的时,activity可能销毁,也可能没有销毁,只有在activity销毁重建的时候onRestoreInstanceState()才会调用。

在onSaveInstanceState()中默认情况下具体干些什么?

默认情况下默认会自动保存Activity中的某些状态,比如activity中各种UI的状态,因此在activity被“系统”销毁和重建的时候,这些Ui的状态会默认保存,但是前提条件是Ui控件必须制定id,如果没有指定id的话,UI的状态是无法保存 的。

activity中保存数据有两种方式onPause(),onSaveInstance(bundle),  恢复数据也有两种途径onCreate(Bundle), onRestoreInstanceState(budle),默认情况下onSaveInstanceSate()和onRestoreInstanceState()会对UI状态进行保存和恢复,如果需要保存其他数据可以在onSaveInstanceState(),onPause()保存,但是如果是持久化的数据得通过onPause()保存(google推荐)。(上述摘自《onSavedInstanceState()和onRestoreInstanceState()理解》)

        横竖屏切替的时候会销毁当前的Activity然后重新创建一个,其生命周期如下:
onPause-> onStop-> onDestory-> onCreate->onStart->onResume

如果这个activity有一个textview,如果想要保持这个textview的内容,只要重写onSaveInstanceState(bundle outState)方法,往这个bundle中写入数据,比如:

outState.putInt("num",1);

这样,然后你在onCreate(bundle savedInstanceState)或者onRestoreInstanceState(bundle savedInstanceState)中就可以拿出里面存储的数据,不过拿之前要判断下是否为null:

savedInstanceState.getInt("num");

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android学习笔记 ---- 四大组件之 Activity 的相关文章

  • 【转帖】【详细】Notepad++使用心得和特色功能介绍 -> notepad/ultraedit的最好的替代品...

    notepad 43 43 简介 Notepad 43 43 是旨在替代Windows默认的notepad而生 xff0c 比notepad的功能强大很多很多 Notepad 43 43 有两个版本 xff0c 一个是ANSI版本 xff0
  • stm32--工程结构的简单理解

    作为一个新手入门stm32的同学 xff0c 我也就做了一个比较简单的工程 xff0c 但是感觉自己并没有对这个stme32有一个比较好的理解 xff0c 因此 xff0c 由于工作原因 xff0c 需要帮别人调试程序 xff0c 在移植工
  • FreeRTOS移植STM32

    第一步 xff1a FreeRTOS官网 https www freertos org https www freertos org 第二步 xff1a OS移植文件 复制 FreeRTOSv202104 00 FreeRTOS Sourc
  • freeOS-----primask faultmask basepri中断屏蔽寄存器

    primask暂时屏蔽中断寄存器 在许多应用中 需要暂时屏蔽所有的中断一执行一些对时序要求严格的任务 这个时候就 可以使用 PRIMASK 寄存器 PRIMASK 用于禁止除 复位 NMI 不可屏蔽中断 和 HardFalut 硬故障寄存器
  • freeOS快速笔记-----任务4种状态

    运行态 当一个任务正在运行时 那么就说这个任务处于运行态 处于运行态的任务就是当前正在 使用处理器的任务 如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态 就绪态 处于就绪态的任务是那些已经准备就绪 这些任务没有被阻
  • freeOS笔记-----列表与列表项

    xff08 2 xff09 uxNumberOfItems 用来记录列表中列表项的数量 xff08 3 xff09 pxIndex 用来记录当前列表项索引号 用于遍历列表 xff08 4 xff09 列表中最后一个列表项 用来表示列表结束
  • FreeRTOS快速笔记————队列

    队列 xff08 任务之间 全局变量 xff09 在实际的应用中 常常会遇到一个任务或者中断服务需要和另外一个任务进行 沟通交流 这个 沟通交流 的过程其实就是消息传递的过程 在没有操作系统的时候两个应用程序进行 消息传递一般使用全局变量的
  • FreeRTOS快速笔记——信号量

    信号量的阻塞时间 单位是系统的节拍周期configTICK RATE HZ 为100 xff0c 则系统节拍时钟周期为10ms xff0c 设置0就是不等待 xff0c 设置1 无限就是按时钟节拍算时间 xff0c 设置portMAX DE
  • Python获取Excel中超链接并下载至本地

    在这一任务的处理中 xff0c 我是用的是 xlrd模块 xff0c 它是用来读取Excel表格数据的模块 特别注意 xff1a 高版本的xlrd目前去除了对xlsx格式的支持 xff0c 仅支持 xls格式 xlrd biffh XLRD
  • MATLAB:梯度下降法求解一元和多元函数极小值和极大值

    梯度下降法 xff0c 顾名思义即通过梯度下降的方法 对于一个函数而言 xff0c 梯度是一个向量 xff0c 方向是表示函数值增长最快的方向 xff0c 而大小则表示该方向的导数 下面展示了用梯度下降法求解一元函数的MATLAB代码 xf
  • 根据Qfont中的family 得到字体文件的路径和文件名称

    转载 xff1a https www zhihu com question 25834024 根据Qfont中的family 得到字体文件的路径和文件名称 xff1b 源码 xff1a 头文件 include include include
  • 如何修改DirectUIHWND类里控件的数据

    有成功修改SysTlistView32 SysTreeVier32 ListVier32 Static类的方法 但对VISTA系统的DirectUIHWND类 没有好的办法 恳请高人指教
  • Jeston-TX2和小觅智能魔方安装tensorflow和keras

    1 下载TensorFlow离线文件 根据自己的JetPack版本在下面链接中选择对应的tensorflow 链接为tensorflow下载链接 如图所示 2 使用pip安装TensorFlow xff0c 如果是Python2用pip2
  • 2023python自动化抢单茅台

    2023python自动化下单抢茅台 xff08 小白篇 xff09 提前声明 本人实测一周 xff0c 均以失败告终 网络超时 当前人数过多等等原因 人格担保程序没有问题 xff0c 毕竟天底下那有这么好的事 最终结果不是重要的 xff0
  • [React] 核心属性refs—— 需要注意的问题

    官网链接 xff1a Refs and the DOM React 1 避免使用字符串的ref 什么是字符串的ref lt button ref 61 34 test 34 gt lt button gt ref所赋予的值是一个字符串 官方
  • AIDL-JNI-HIDL

    Android项目开发经常会遇到各种概念性的技术 AIDL xff08 Android Interface definition language xff09 Android中的一种IPC xff08 Inter Process Commu
  • Android Verified Boot

    Android Verified Boot 验证程序用来保护用户使用软件在设备上运行的完整性 它通常从设备固件的只读部分开始 xff0c 该部分加载代码并仅在密码验证代码是真实的且没有任何已知的安全缺陷之后执行 AVB是经过验证的引导的一种
  • Android快速编译镜像

    make bootimage 编译bootimagemake vendorimage编译 vendorimagemake dtboimagedtbo ninja快速编译系统 xff08 前提是编译部分的Android mk没有改变 xff0
  • nuttx-概述

    早期基于MSP430系列 STM32系列 EFM32系列 AT91SAM9X imx6ul系列做各种物联网产品 xff0c 近几年国芯片慢慢崛起 xff0c 加上ST芯片价格暴涨 xff0c 更是让国产芯片赢得了难得的发展机会 xff0c
  • nuttx-环境搭建

    尽管nuttx主要遵循Posix 和 ANSI 标准 xff0c 但是毕竟向下支持到了STM32F1系列的芯片 xff08 不带MMU xff09 xff0c 所以这个操作系统本质上还是一个微操作系统 下面从helloworld开始 官网

随机推荐

  • nuttx-第一个app demo

    应用开发 xff0c 与ucos freeRTOS等完全不一样 xff0c 看起来更像是linux的方式 xff0c os与app独立开发 xff0c 但是从单片机不具备MMU这一点就能判断出来 xff0c 假的就是假的 xff0c 即便是
  • nuttx-app的编译和执行原理

    首先阅读apps readme md Built In Applications NuttX also supports applications that can be started using a name string In thi
  • 如何远程登录ubuntu图形界面

    Server u need XDM service client u need exceed xwin32 Here is an instruction I found long time ago when I played with it
  • 网络操作系统 第十三章 邮件服务器及其安装与配置

    1 简述电子邮件的工作原理 用户编辑的E mail被转换成一个标准的邮件格式 xff0c 包括各种样式的文件 xff0c 如图像 声音 可执行程序等 邮件的内 容以各种编码方式转换成ASCII码的形式 xff0c 邮件的接收人地址由 用户名
  • nuttx-OS启动前的准备工作

    程序的基本编译过程为 xff1a 预处理 编译成汇编语言 汇编成机器指令 链接成可执行文件 xff0c 链接依赖于链接脚本 xff0c 使用链接脚本来进行更复杂的地址设置 xff0c 包括了代码段 xff0c 数据段 xff0c bss段等
  • linux线程调度方式测试总结

    总结 xff1a 对三种线程调度方式进行测试 1 SCHED OTHER 分时调度策略 xff0c 为默认方式 xff0c 凡是采用本模式的线程 xff0c 线程优先级会强制为0 xff0c 通俗点将 xff0c 工作在本模式下的线程 xf
  • 网络小白入门之路之以太网链路聚合 ---尚文网络奎哥

    随着业务的发展和园区网络规模的不断扩大 xff0c 用户对于网络的带宽 可靠性要求越来越高 传统解决方案通过升级设备方式提高网络带宽 xff0c 同时通过部署冗余链路并辅以STP xff08 Spanning Tree Protocol x
  • libGL error: MESA-LOADER: failed to open swrast libGL error: failed to load driver: swrast X Error o

    在ubuntu22 04 运行代码 出现这个错误 xff0c 显卡驱动正常 xff0c 并且cuda也能调 xff0c 目前还不知道怎么处理 后续 查了很多资料 xff0c 有些说是环境没配好 xff0c 有些说是显卡驱动与内核版本不一致
  • SDN(一) 用OpenWRT将路由器刷成openflow交换机

    1 引言 积跬步以至千里 xff0c 积怠情以至深渊 xff0c 我要做一个踏实的ABCer 没想到还是正式步入了SDN这条康庄大道上 一切还需从初识Mininet WIFI说起 xff0c 以为SDN如仿真层面那般 xff0c 一个模块对
  • 树莓派(二) 树莓派开启VNC远程连接服务

    1 启用树莓派 VNC 服务 在树莓派命令行终端执行如下命令 xff1a sudo raspi span class token operator span config 出现如下界面 xff1a 依次操作 xff1a Interfacin
  • 自己操作SMT贴片过程 BGA QFN封装

    提前准备 xff1a 1 钢网 xff08 如果有bga 尽量选择0 01mm的厚度吧 xff09 2 锡膏 xff08 如果过期了 xff0c 可以找个空板 xff0c 加点锡膏过一次回流焊测一下导通性 xff09 3 固定台 xff08
  • Linux系统Ubuntu终端用命令编辑一文件并保存

    1 首先进入到该文件所在的目录下 xff0c 比如我要找learn test1 file txt这个文件 xff1a ls表示查看该目录下的所有文件 2 查看该文件的内容 xff0c 使用命令cat file txt xff0c 如下可看到
  • 异常与中断

    异常比中断的优先级高 xff0c 中断可以屏蔽 xff0c 但异常是一定要去处理的 1 undefined instruction CPU遇到了不认识的指令 xff0c 则会进入未定义指令异常处理函数 xff0c 因为CPU不认识该指令 x
  • 大学老师告诉我:20年内程序员会被取代,未来不需要程序员...

    今天收到一个同学的邮件 xff0c 他告诉我 xff0c 他们的大学计算机老师告诉他 xff0c 以后机器人可以自动生成代码 xff0c 估计20年 xff0c 程序员就会被取代 所以他现在感觉很苦恼 xff0c 既然会被淘汰 xff0c
  • MySQL 主从复制

    新建主服务器容器实例3307 span class token function docker span run p span class token number 3307 span 3306 name mysql master span
  • 盘点strlen()、sizeof()、length()、size()的区别

    目录 序言 1 总览 2 用法 2 1 sizeof 2 2 strlen 3 length 和size 序言 项目中经常用到这些用于计算大小的函数 或运算符 xff0c 网上也有许多关于其间区别的文章介绍 xff0c 在此按自己的思路整理
  • Android:知识体系结构

    刚开始接触android xff0c 学习之初 xff0c 各种迷茫阿 xff0c 网上看到了这个知识结构体系的图 xff0c 觉得很有用 xff0c 在此备份一下 xff0c 或许以后的某一天我成了android大神 xff08 PS x
  • android studio导入一个已存在的项目

    在使用android studio导入一个已经存在的项目之前 xff08 xff01 xff01 xff01 记住是导入之前 xff09 xff0c 需要做三件事 xff1a 1 xff0c 查看项目的gradle wrapper grad
  • 从内部类中访问本地变量temp; 需要被声明为最终类型

    class Outer 定义外部类 private String info 61 34 hello world 34 定义外部类的私有属性 public void fun final int temp 定义外部类的方法 class Inne
  • Android学习笔记 ---- 四大组件之 Activity

    1 Activity的概念与Activity的生命周期图 xff1a Activity是一个应用程序的组件 xff0c 他在屏幕上提供了一个区域 xff0c 允许用户在上面做一些交互性的操作 xff0c 比如打电话 xff0c 照相 xff