Activity入门2——生命周期与任务栈

OnCreate与OnDestroy

OnCreate:创建一个活动。

OnDestroy:销毁一个活动。

假设某个用户在一个活动里输入了一些信息,用户由于某些原因退出了该活动,返回时希望能够还原之前输入的信息,不然重新输入就太麻烦了。

public class LetterActivity extends Activity {
    public final String LETTER_RECORD = "letter_record";
    private SharedPreferences mSharedPreferences;
    EditText mLetterText;
    Button mLetterButton;
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_letter);

        mLetterText = this.findViewById(R.id.letter_text);
        mLetterButton = this.findViewById(R.id.letter_button);

        mLetterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String content = mLetterText.getText().toString().trim();
            }
        });

        mSharedPreferences = this.getSharedPreferences(LETTER_RECORD, MODE_PRIVATE);
        if (mSharedPreferences != null) {
            String record = mSharedPreferences.getString("record", null);
            if (!TextUtils.isEmpty(record)) {
                mLetterText.setText(record);
            }
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        String content = mLetterText.getText().toString().trim();
        if (TextUtils.isEmpty(content)) {
            return;
        }
        mSharedPreferences = this.getSharedPreferences(LETTER_RECORD, MODE_PRIVATE);
        SharedPreferences.Editor editor = mSharedPreferences.edit();
        editor.putString("record", content);
        editor.apply();
    }
}

 从以上代码可以看到:

onDestroy:在活动销毁时,将用户输入的内容通过持久化的方式存起来。

onCreate:在活动创建时,如果已经有持久化存储的内容,就把该内容取出并赋值到输入栏里。

Onstart,OnStop与OnResume,OnPause

OnStart:活动开始可见

OnStop:活动不可见

OnResume:活动获得焦点

OnPause:活动失去焦点

这里举最常见的case。

case1:桌面点击启动一个活动,触发onCreate->onStart->OnResume

首先创建活动,随后活动可见,之后活动获得焦点。

case2:全面屏手机左滑/非全面屏手机点back键:触发onPause->onStop

首先失去焦点,随后不可见。但是活动还在后台运行,因此没有onDestroy。

case3:全面屏手机上滑/非全面屏手机点home键,触发onPause->onStop,与上一条同理。也就是说活动只要进入后台,就会走到onStop状态。

case4:活动跳转到另一个透明活动,触发onPause。可以通过以下代码设置成一个透明活动。

<activity android:name=".LetterActivity" android:theme="@android:style/Theme.Translucent"/>

这种情况就是典型的,活动依旧可见,但是失去了焦点,不能操作。

横竖屏切换

活动在横竖屏切换时会触发一系列的状态切换:

可以看到,横竖屏切换本质上是销毁了之前的活动,并重新创建了一个新活动。

在一些场景下,比如游戏,视频播放器,不希望在转屏的时候重新创建活动,这样活动里的对象和状态与之前的都不相同了。可以在manifest里面增加配置,可以在转屏时不再触发活动状态的变化:

android:configChanges="keyboardHidden|screenSize|orientation"

任务栈

活动在启动的时候可以遵循一定规则处理活动之间的逻辑。

standard:创建新的活动时,自动移动到栈顶,退出时根据入栈顺序逐次退出。

创建多少个活动,就要点击多少次返回来退出。默认的启动模式就是这种,适用于大多数场景。

singleTop:如果栈顶已经是当前活动,就不会创建新的活动了。

适用场景:被动调用,防止多个界面同时被调用。比如通知和推送。

singleTask:如果目标活动没有创建,就创建出来放在栈顶;如果目标活动已经被创建,就把栈顶里该活动上方的活动全部移除。

适用场景:某个活动占用资源过大的情况下,保证不会重复创建该活动。

singleInstance:独立使用一个任务栈,不会再创建,在系统里只有唯一一个实例。

适用场景:输入法工具等,在每个场景都在使用。

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

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

相关文章

软考高级架构师:嵌入式软件开发概念和例题

一、AI 讲解 嵌入式软件开发和传统软件开发的差异 嵌入式软件开发与传统软件开发在目标、环境和开发过程等方面有显著的差异。下面通过对比的方式&#xff0c;简要阐述这些差异所在&#xff1a; 特性嵌入式软件开发传统软件开发开发目标针对特定硬件系统&#xff0c;强调软硬…

【Fn+windows键】‘Windows键+L’不能锁屏的问题

winL锁屏 3个键盘灯1.NumLock指示灯2.CapsLock指示灯3.ScrollLock指示灯 2.电脑锁屏问题 突然发现winL不能锁屏&#xff0c;反而是在自己打开的软件界面内编辑 各种操作之下&#xff0c;发现键盘上最不常用的灯亮了 所以了解了一番键盘灯的功能 3个键盘灯 1.NumLock指示灯 N…

快递费用一目了然:taobao.item_fee API在电商中的应用

taobao.item_fee API在电商中的应用主要体现在精准计算快递费用&#xff0c;从而为用户提供一个更加透明和便捷的购物体验。这一接口允许淘宝或天猫的开发者根据商品ID、收货地址等信息&#xff0c;精确计算商品的快递费用。对于用户而言&#xff0c;这意味着在购物过程中能够实…

工厂模式图

工厂模式 介绍一下简单工厂模式与工厂方法模式 结构图 简单工厂模式 工厂方法模式

【剑指offr--C/C++】JZ7 重建二叉树

一、题目 二、思路及代码 前序遍历&#xff1a;中、左、右。所以前序遍历的第一个节点是树的根节点&#xff0c;第二个节点是左子树的根节点。。。。 中序遍历&#xff1a;左、中、右。树的根节点在中间某处 我们可以根据二者的特点结合一下&#xff1a;对于前序遍历序列{1,2,4…

ubuntu安装sublime3并设置中文

安装Sublime Text 3 在Ubuntu上安装Sublime Text 3可以通过以下步骤进行&#xff1a; 打开终端。 导入Sublime Text 3的GPG密钥&#xff1a; wget -qO- https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - 添加Sublime Text 3的存储库&#xff1a; …

纯C代码模板

一、快排 void QuickSort(int *a,int left,int right){if(left>right) return;else{int low left,high right;int pivot a[low];while(low<high){while(a[high] > pivot && low < high){high--;}a[low] a[high]; //必须先动a[low]while(a[low] < …

TR3 - Transformer算法详解

目录 文本输入处理词向量位置向量 编码器 EncoderSelf-Attention多头注意力机制残差连接 解码器 Decoder线性层与Softmax损失函数总结与心得体会 这周来看一下Transformer是怎么将文本转换成向量&#xff0c;然后又输入到模型处理并得到最终的输出的。 文本输入处理 词向量 …

计算机内存是如何管理的

计算内存的那些事儿——内存管理 大家回忆一下&#xff0c;计算机结构&#xff0c;或者说一个SoC&#xff08;system-on-chip&#xff09;芯片的结构。 cpu、memory、peripherals&#xff0c;这是计算机的主要部件&#xff0c;三者之间通过system bus勾搭在一起。 The main co…

易支付和独角数卡对接TokenPay开通USDT收款教程

TRX、USDT-TRC20、ETH系列区块链代币的支付通道是很多发卡和电商平台需要的&#xff0c;因为传统的微信、支付宝、PayPal等支付接口审查严格、手续费高。自建的代币接口完成没有手续费&#xff0c;稳定可靠&#xff0c;也没有审查要求。 易支付在行业普及广泛&#xff0c;大部…

JVM(Java虚拟机)

文章目录 一、JVM简介1.1 JVM概念1.2 什么是Java虚拟机呢&#xff1f;Java虚拟机的好处是什么呢&#xff1f; 二、JVM整体组成部分三、类加载器3.1 类加载子系统3.2 类加载过程3.2.1 装载(Load)3.2.2 链接(Link)3.2.3 初始化(Initialize) 四、运行时数据区4.1 方法区&#xff0…

stack 与 queue 与 priority_queue 与 仿函数 与 模板进阶

目录 stack queue deque priority_queue 使用 模拟实现 仿函数 仿函数的用法 仿函数的意义 模板进阶 非类型模板参数 模板特化 类模板特化的用法 类模板特化的意义 函数模板特化的用法 模板的分离编译 模板分离编译报错的原因 ​解决方法 模板总结 栈、队列…

Git安装教程(图文安装)

Git Bash是git(版本管理器)中提供的一个命令行工具&#xff0c;外观类似于Windows系统内置的cmd命令行工具。 可以将Git Bash看作是一个终端模拟器&#xff0c;它提供了类似于Linux和Unix系统下Bash Shell环境的功能。通过Git Bash&#xff0c;用户可以在Windows系统中运行基于…

【数据处理包Pandas】DataFrame对象的合并

目录 前言一、回顾Numpy数组的合并二、concat方法合并DataFrame对象三、append方法的使用四、merge方法合并DataFrame对象&#xff08;一&#xff09;比较merge与concat&#xff08;二&#xff09;参数on、left_on和right_on的用法&#xff08;三&#xff09;合并时四种不同的连…

c# wpf template ItemsPanel 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window9"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/…

软件测试(Junit5 单元测试框架)(五)

1. Junit单元测试框架 Junit 是 Java 的一个单元测试框架, 使用Selenium写自动化测试用例, 使用Junit 管理写好的测试用例. 2. 注解&#xff1a; Test 表示当前的这个方法是一个测试用例. 示例: 添加依赖 <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-…

[译] 教你如何用 Flutter 的 GestureDetector 构建自定义滑块

这个控件非常简单&#xff0c;我们接收完成的百分比值&#xff0c;以及正面和背面部分的颜色。主 Container 将背面颜色作为背景&#xff0c;我们将绘制正面部分去覆盖它。它的子节点是 Row&#xff0c;虽然它只包含一个子节点&#xff0c;但我保留了它&#xff0c;方便你添加另…

impala使用round函数保留小数失效

问题描述如标题所示 1.理论情况: round()函数,是用来做四舍五入的,比如:select round(2.126,2) 结果为:2.132.异常情况: 但是有时候会出现一些意料之外的情况,比如:select round(1/3,3) 结果为:0.33300000000000002正确的应该是:0.333截图效果示例如下: 3.解决办…

51之LCD1602与模块化编程

LCD1602&#xff0c;即我们开发板上附赠的那个液晶显示屏&#xff0c;我们通常可以使用这个液晶显示屏用来做调试工具&#xff0c;我们使用一下江科大提供的关于这个LCD1602的代码&#xff0c;用来为我们提供了类似C语言标准库里面的printf函数的用法&#xff0c;只是这个更加复…

非关系型数据库-----------探索 Redis高可用 、持久化、性能管理

目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…