Android Activity 完全解析(上)

使用OBS推流,大华摄像头 srs服务器播放 说明:ffmpeg可以推流,但是是命令行方式不太友好,还可以使用主流的OBS开源推流软件,可从官网下载最新版本,目前很多网络主播都是用它做直播。该软件支持本地视频文件以及摄像头推流。去下载。 阅读详情

       学习 Android 恐怕打交道最多的就是 Activity,只要是我们看到的界面上的东西,几乎都是以 Activity 为载体的,它是一种包含用户界面的组件,用于和用户进行交互,Activity 是基础中的基础,但越是基础的东西,我们就有可能忽视它的重要性,这样我们的基础就会不扎实,所以即使是基础的东西,我们还是很有必要去花时间尽力好好分析一下的,下面我们对活动进行详细的介绍,说到活动恐怕活动的生命周期我们就不得不去研究,来看概览图




Activity 的生命周期全面分析:


一、正常情况下一个 Acitivity 会经历如下的生命周期:


Activity 经典生命周期图,来自 Google 官网:


1. 生命周期介绍


1)onCreate

这是 Activity 生命周期的第一个方法,这个方法相信我们已经看到了很多次,每个活动我们都重写了这个方法,它会在活动第一次被创建的时候调用,在这个方法中我们可以去做一些初始化的操作,比如调用 setContentView 去加载页面的布局,初始化 Activity 所需的数据等

2)onStart

这个方法在活动由不可见变为可见时调用,这时 Activity 已经可见了,但是还没有出现在前台,还不能和用户进行交互,我们可以理解为 Activity 已经有了,但我们还看不见

3)onResume

这里 Activity 已经可见了,可以和用户进行交互了,这时 Activity 处于栈顶,正在运行,这里要注意和 onStart 进行区分,可以理解为 onStart 和onResume 都表示 Activity 可见,但 onStart 的时候 Activity 还在后台,用户不可见,onResume 的时候在前台,用户可见

4)onPause

这个方法表示 Activity 正在停止,但还没有真正的停止,我们通常在这个方法中将一些消耗资源东西释放,可以存储一些关键的数据,但一定不能做耗时的操作,要不会意向下一个活动的使用

5)onStop

表示 Activity 即将停止,在 Activity 完全不可见得时候调用,可以做一些回收工作,也不能太耗时,这里要注意和 onPause 方法的区分,它和 onPause 方法的主要区别在于,如果新启动的方法是一个对话框式的活动,onPause 方法执行,onStop 方法不执行

6)onDestroy

表示 Activity 即将被销毁,对应于 onCreate 方法,这是 Acitivty 生命周期方法的最后一个回调方法,活动的状态将变为销毁状态

7)onRestart

这个方法在活动由停止状态变为运行状态时调用,这时候活动就是被重新启动了


上面这些都是一些理论的东西,下面我们就来真正的运行代码来看看 Activity 真正的执行情况


/**
 * 生命周期测试MainActivity
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            String data = savedInstanceState.getString("key");
        }
        Log.i(TAG, "MainActivity: onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "MainActivity: onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "MainActivity: onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "MainActivity: onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "MainActivity: onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "MainActivity: onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "MainActivity: onRestart");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String data = "hello";
        outState.putString("key", data);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    }
}

这里我们创建了一个 MainActivity 并且重写了 Activity 生命周期的方法,这时候我们运行程序,在 Log 的控制台可以看到如下打印


MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume


这里正好验证了我们上面的理论,这时候我们用户可见,调用 onResume 方法

然后我们点击后退按钮,我们再来看一下控制台的打印内容


MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume
MainActivity: MainActivity: onPause
MainActivity: MainActivity: onStop
MainActivity: MainActivity: onDestroy


这时候一个 Activity 完整的生命周期就执行完毕了

接下来我们不点击后退键,我们点击 Home 键来看一下生命周期的情况


MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume
MainActivity: MainActivity: onPause
MainActivity: MainActivity: onStop


这里要注意 Activity 并没有去执行 onDestroy,这里 Activity 只是变成了不可见状态,并没有被销毁,我们再点击打开应用


MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume
MainActivity: MainActivity: onPause
MainActivity: MainActivity: onStop
MainActivity: MainActivity: onRestart
MainActivity: MainActivity: onStart

MainActivity: MainActivity: onResume


这里注意到应用并没有调用 onCreate 重新创建,而是只调用了 onRestart,onStart,onResume 方法

这里我们就把在正常情况下的一个 Activity 的生命周期情况介绍完毕,总结如下:


 

2. 活动(Activity)的状态


每个活动在其生命周期中最多可能会有 4 种状态


1)运行状态


当一个活动位于返回栈的栈顶时,这时活动就处于运行状态,系统最不愿意回收的就是出于运行状态的活动,因为这样会带来非常差的用户体验


2)暂停状态


       当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态,你可能会觉得,既然活动已经不在栈顶了,还怎么会可见呢?这是因为并不是每一个活动都会占满整个屏膜的,比如对话框形式的活动只会占用屏膜一部分的区域,处于暂停状态的活动任然是存活的,系统也不愿意去回收这种活动(因为它还是可见的),只有内存极低的情况下,系统才会去考虑回收这种活动


3)停止状态


       当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入停止状态,系统任然会为这种活动保存相应的状态和成员变量,但是当其他地方需要内存时,处于停止状态的活动有可能会被系统回收


4)销毁状态


当一个活动从返回栈中移除后就变成了销毁状态,系统会最倾向于回收处于这种状态的活动,从而保持手机的内存充足


二、多个 Activity 交互的生命周期:


这里我们新建一个 SecondActivity 类,我们在 MainActivity 中设置一个点击按钮,用来跳到 SecondActivity,并且和 MainActivity 一样复写生命周期的方法如下:

/**
 * 生命周期测试SecondActivity
 */

public class SecondActivity extends AppCompatActivity {

    private static final String TAG = "SecondActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Log.i(TAG, "SecondActivity: onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "SecondActivity: onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "SecondActivity: onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "SecondActivity: onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "SecondActivity: onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "SecondActivity: onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "SecondActivity: onRestart");
    }
}

现在我们来看分析生命周期的运行情况:首先打开 MainActivity,控制台打印生命周期运行如下:

MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume


这时候我们再点击跳转按钮,控制台打印生命周期如下:

MainActivity: MainActivity: onPause
SecondActivity: SecondActivity: onCreate
SecondActivity: SecondActivity: onStart
SecondActivity: SecondActivity: onResume
MainActivity: MainActivity: onStop


这里我们思考如下内容

1)为什么要先调用 onPause 方法暂停当前显示的 MainActivity

2)为什么要等 SecondActivity 的 onCreate,onStart,onResume 方法执行完才执行 MainActivity的 onStop 方法,为什么不先执行当前 MainActivity的 onPause,onStop 方法呢?

分析如下:

在 MainActivity 打开 SecondActivity 的时候,会先执行 MainActivity 的 onPause 方法,然后执行 SecondActivity 的 onCreate、onStart、onResume 方法,完了再执行 MainActivity 的 onStop 方法,这里面还是有一种思想的,首先执行 MainActivity 的 onPause 方法是要关闭当前 MainActivity 的一些状态信息,如音频,视频等的状态,以免对新打开的 Activity 造成影响,试想我们正在听歌或看电影,这时候打进来一电话,如果我们不把当前的 Activity 先onPause 掉,会使一种怎样的体验,一边听歌,一遍打电话,不敢想象这样的场景,那么为什么又是在 MainActivity 执行完 onPause 而没有 onStop 的情况下就先执行 SecondActivity 的 onCreate,onStart,onResume 方法然后再执行 onStop 方法呢,这是因为考虑到如果在打开 SecondActivity 开启时发生 crash 的情况,这样如果 MainActivity 执行了 onStop 方法则会变为不可见状态,就会呈现出黑屏状态,用户什么都看不到。


三、横竖屏切换的时候 Acitivity 的生命周期:


打开 MainActivity,控制台打印情况如下:


MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume


这时候我们切换为横屏,看一下控制台的打印情况:


MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume
MainActivity: MainActivity: onPause
MainActivity: MainActivity: onStop
MainActivity: MainActivity: onDestroy
MainActivity: MainActivity: onCreate
MainActivity: MainActivity: onStart
MainActivity: MainActivity: onResume


还有就是在我们横竖屏切换的时候 Acitivity 的生命周期先是销毁掉然后会重新创建,所以我们展示的数据要在 onSaveInstanceState 方法中去保存数据,在 MainActivity 中添加如下代码就可以降临时数据进行保存:


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String data = "hello";
        outState.putString("key",data);
    }

这样数据就保存下来了,那么我们在哪里进行恢复呢?相信我们在一个地方经常看到这个 Bundle savedInstanceState,对,就是在我们的 onCreate 方法里面也有吧一个 Bundle 类型的参数,这个参数一般情况下都是 null,但是如果在活动被系统回收之前通过 onSaveInatanceState 方法来保存数据的话,这个参数就会带有之前所保存的所有数据,我们只需要通过如下方法取出:


  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            String data = savedInstanceState.getString("key");
        }
        Log.i(TAG, "MainActivity: onCreate");
    }

取值之后再做相应的操作就好了


四、如何启动系统的 Activity:


启动浏览器:

@Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri url = Uri.parse("https://www.baidu.com");
        intent.setData(url);
        startActivity(intent);
    }

启动相册:

@Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivity(intent);
    }

发送短息:

 @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT,"hello");
        startActivity(intent);
    }

启动电话界面:

 @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri url = Uri.parse("tel:123456");
        intent.setData(url);
        startActivity(intent);
    }

如果想更多的去学习,可以去查看 Intent 相关的 API点击打开链接



Android四大组件完全解析(一)---Activity 本文参考\android\android\frameworks\base\core\java\android\app\Activity.java文件中的类注释,以及android/frameworks/base/docs/html/guide/components/activities.jd文件One Activity简介:Activity是一个单独的、可以和用户交互的东西。几乎所有的activit 阅读详情

相关推荐

理解和控制 OBS 媒体源 - 前提条件与操作

在使用 Open Broadcaster Software (OBS) 开发过程中,对媒体源进行有效控制是实现高质量直播和录制的关键。媒体控制功能,如播放、暂停和重启,都依赖于 OBS 的核心机制。本文通过深入分析函数的实现细节,揭示了确保这些控制功能正常工作的前提条件,并提出了标准的操作流程。

吃面不喝汤的博客 831

【安卓学习_4】活动启动模式

什么是启动模式 简单来讲,就是指的安卓应用的开启模式,也就是安卓活动开启的策略。 为什么需要启动模式 1.生成APP被其他APP调用的Activity,例如浏览器应用,照相机应用。 2.有效避免生成重复页面,降低手机内存的利用率。 3.任务栈过深的时候,避免一直按返回键也退不回想要的页面。 安卓中的任务栈 任务栈,在安卓关键字中叫做 Task,是用来放置Activity实例的容器,顾名思义,以栈的形式进行存放,根据栈先进后出的性质,任务栈主要有2个基本操作:压栈和出栈,存放的Activity是不支

丑小鸭 675

memebot:BOT与Twitch聊天室或OBS准许聊天室之间的差异,现场视频(Memes)的来源

Memebot BOT与Twitch聊天室的整体集成,OBS在现场的许可差异很大,而视频(Memes)的直播来源。 活着的编码法 。 前要求 可以通过OBS Studio安装插件,然后在Obs 添加许可。 可以将安装在网络服务器上,作为网络服务器的基础设施。 BOT的Twitch para atuarvocêprecisa criar umusuárioaddicional。 Vocêprecisa criar uma CENA no seu OBS chamada“ Memes”。 在“媒体来源”中显示自己的想法。 否则,请使用媒体资源。 Apósposicionar o meme na tela,oculte-o。 可以确定BOT的可识别性,或者无需数字聊天,可以从媒体上查看5个搜索引擎。 重要信息,媒体源,复选框“在源变为活动状态时重新开始播放” , “在播放结束时不显示任

OBS 视频输出处于活动状态。请关闭任何输出以更改视频设置

想调下FPS来着,结果发现灰色的,看了一下原来是虚拟摄像头的问题。 解决方法: 工具-虚拟摄像头-停止,即可解决。

Luke的学习笔记 1万+

常见卫星图源下载教程

上面列出的8个常见的亚米级别数据源都可以通过xyz协议或者wmts/wms协议进行下载。这些协议是什么?地理信息数据为了方便网络传输,制定了一系列的地理数据传输标准(wms/wmts/xyz等)。协议特点优点缺点栅格数据支持矢量数据支持WMS通过HTTP请求获取GIS数据,服务器会将数据渲染成图像高度定制的地图;交互性强服务器渲染图像,响应时间较长支持有限支持WMTS提供预渲染的地图瓦片速度快,因为地图瓦片可以预先生成并在请求时快速提供瓦片的内容是预先确定的,无法进行定制支持。

锐多宝的地理空间 1万+

STM32H743的ADC还能这么玩?定时器触发+DMA搬运,构建低CPU占用的数据流

本文深入探讨了STM32H743微控制器中ADC的高效使用方法,通过定时器触发和DMA搬运技术实现低CPU占用的数据流采集。详细解析了硬件架构、CubeMX配置步骤及高级优化技巧,包括双缓冲技术和多ADC同步采样,适用于电机控制、音频采集等高性能应用场景。

weixin_30698527的博客 647

窗口改变的时候自动刷新浏览器

$(window).resize(function () {   window.location.reload();    var wd=document.body.clientWidth; if(wd>768){ console.log(666) } });

zuo_zuo_blog的博客 570

Gartner《构建可扩展数据产品建设框架》心得

数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。

2501_91410404的博客 1005

Android Activity 完全解析(下)

在之前的文章中我们介绍了Activity的生命周期,包括正常情况下Activity的生命周期,以及多个Activity交互和横竖屏切换Activity之间的生命周期,还介绍了如何启动系统的Activity,Activity之间简单的数据交互,以及传递大数据时遇到的问题,还有就是Activity的四种启动模式,如果你对Activity还不太了解,那么可以先阅读之前的两篇关于Activity的相关介绍

QDJdeveloper 1503

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1286

大模型应用开发面试全流程实录:RAG、上下文工程与多Agent协作技术深度解析

Transformer 依靠多头自注意力和位置编码实现高效序列建模。Prompt Engineering包含多种设计思路,如 Zero-shot、Few-shot、Chain-of-thought,提升模型泛化和推理。Token 和上下文窗口直接影响模型性能与成本,选择需结合实际业务场景(如客服对话需长窗口)。Embedding 技术是 RAG 的基础,决定了语义检索效果。向量数据库如 FAISS、Milvus等分别适用于本地/分布式检索。

m0_52114506的博客 828

Android Activity 完全解析(中)

在上一篇文章中我们学习了Activity的生命周期以及用Intent打开系统的方法相关方面的知识,分析了单个Activity生命周期从创建到销毁的过程,以及多个Activity之间互相跳转的生命周期的创建过程,如果你还不是很清楚,可以先阅读Android Activity完全解析(上),今天我们接着来学习一下Activity其它的相关方面的知识,为了让大家看起来一目了然今天分享的内容,绘制如

QDJdeveloper 2078

【OD统一考试(B卷)】比赛的冠亚季军,Python 解答

比赛的规则是 0 号和 1 号比赛,2 号和 3 号比赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮,实力值大的获胜,实力值相等的情况,id 小的情况下获胜,轮空的直接进入下一轮。第一轮比赛,id 为 0 实力值为 2 的运动员和 id 为 1 实力值为 3 的运动员比赛, 1 号胜出进入下一轮争夺冠亚军,id 为 2 的运动员和 id 为 3 的运动员比赛,3 号胜出进入下一轮争夺冠亚军;2 号与 0 号,比赛进行季军的争夺,2 号实力值为 4,0 号实力值 2,故 2 号胜出,得季军。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

Android中Activity完全解析

Activity的生命周期 1.Activity几种状态 1、Active(活动):当Activity位于栈顶时,它是可见,有焦点的前台Activity,可以用来响应用户的输入。 2、Paused(暂停):一般情况,你的Activity可见但不具有焦点,例如 当前面的Activity是全透明或非透明的Activity时,下面的Activity就位于Paused状态。 3、Stopp...

weixin_30662539的博客 90

【1.2】Costas环的基本原理概述

Costas环是一种用于载波恢复的相干解调技术,可直接从BPSK等抑制载波信号中恢复本地载波并完成解调。其核心结构包含同相/正交双支路处理,通过混频、低通滤波后,利用I/Q支路信号乘积进行相位误差检测,经环路滤波器调节VCO输出频率,实现载波同步。课程将重点讲解Costas环的MATLAB仿真实现、系统性能分析及FPGA开发,包括信号产生、频偏模拟、滤波器设计等模块,并通过AWGN信道和不同频偏条件下的测试验证系统性能。该技术无需单独提取载波,在数字通信系统中具有重要应用价值。

fpga/matlab/simulink算法仿真工程 451

Vue - 解决报错 Error: Cannot find module ‘XXX\@vue\cli-service\bin\vue-cli-service.js‘(vue项目编译运行出错,启动失败)

vue报错,Error: Cannot find module ‘@vue\cli-service\bin\vue-cli-service.js‘,vue2项目启动报错,vue3项目运行出错,vue执行npm run serve报错,找不到@vue/cli-service模块,vue项目关于:Error: Cannot find module ‘D:\@vue\cli-service\bin\vue-cli-service.js‘的解决方案,vue项目跑不起来了,Vue项目报错,跑项目报错Cannot fi

🏆 前端领域优质创作者 3115

Android Activity生命周期完全解析

首先啊说道这个生命周期   第一个就是Activity的生命周期 其次呐就是这个Fragment的生命周期 本篇就是讲述Activity的生命周期 (分析的有不足之处还请留言) Activity的生命周期有七个( 1.onCreate:页面创建 2.onStart:页面启动 可以显示不可点击 3.onResume:页面聚焦 可以显示可以点击 4.onPause: 页面暂停 可显示不可点...

72的博客 627

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android自定义Activity切换动画完全解析

Android自定义Activity切换动画完全解析 在Android开发中,Activity之间的切换是最常见的业务场景了,而且系统默认的Activity之间的切换都是带动画效果的(右进右出)。但是有的时候我们不满足于系统的默认动画效果,想自定义Activity之间的切换动画,这时候我们就要分析分析如何自定义出自己想要的动画效果并给Activity应用上了。 基础概念: 四...

NJP_NJP的博客 4793

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android源码探究:Activity启动流程完全解析

概述 本文主要内容是从源码角度进行Activity启动流程的分析。由于整个启动的过程非常长并且代码非常多,同时受限于笔者的水平,所以本文不会细致到解释每一行的代码的具体作用,只能抽取处关键部分的代码就主体流程进行分析,如有错误之处,希望批评指出。 行文脉络 由于本文会非常长,为了方便读者的理解,首先给出笔者的行文脉络。本文主要沿着:在应用程序1的Activity A内打开另一个应用程序2的Acti...

蓝天白云梦的csdn博客 1873

FlatBuffers 二进制损坏检测实战:基于 flatc --annotate 的无效二进制测试套件深度解析

FlatBuffers 是一种零拷贝、内存高效的序列化库,其二进制(wire format)中大量使用偏移量(offset)与长度(length)字段,任何一处被意外篡改都可能导致解析越界或崩溃。本文以仓库中 [tests/annotated_binary/tests/README.md](https://link.gitcode.com/i/86cc0c9a79a156cfe38c126b31e

gitblog_00536的博客 447

Android基础——3:Activity完全解析

目录2.1 Activity简介2.2 活动的简单使用2.3 活动的生命周期2.3.1 7大生命周期2.3.2 Activity生命状态2.3.3 返回栈2.3.4 常用生命周期流程2.3.5 Activity4大启动模式 standardsingleTopsingleTasksingleInstance2.3.6 Activity常用技巧2.4 使用Intent在活动间穿梭2.4.1 显示Int

ThePromonkeyOf_HeLuo的博客 519

Android activity四种启动模式完全解析

Android使用“任务栈”(也称“back stack”)存放启动的各个activity。一般情况下,一个应用只有一个任务栈。特殊情况允许一个应用使用多个任务栈。典型的FILO(First In Last Out)数据结构。点击“back”键,自上至下依次出栈结束activity。activity的四种启动模式分别如下: standard singleTop singleTask singleIn

一口仨馍 3064

Android Activity生命周期完全解析:从onCreate到onDestroy的完整指南

掌握Android Activity生命周期是每个Android开发者的必备技能!🎯 在这个终极指南中,我们将深入探讨Activity生命周期的每一个阶段,从onCreate到onDestroy,为您提供简单易懂的完整解析。无论您是Android开发新手还是有经验的开发者,这篇文章都将帮助您彻底理解Activity的生命周期管理。 ## 为什么Activity生命周期如此重要?🤔 Acti

gitblog_00536的博客 302
上一篇: 设计模式之单例模式
下一篇: Android Activity 完全解析(中)
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值