[Android] Android Activity详细解析

安卓基础知识之Activity篇(一):Activity生命周期 安卓基础知识之Activity篇(一):Activity生命周期 安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门。同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系,同时给自己日后留个知识参考。 开始的开始 安卓四大组件中,最常用的组件莫过于我们的Activity组件。安卓程序员每天都在直接或间接地接触着Activity,所以Activity基础知识的重要性不言而喻。 正文 一. 正常情况下的生命周期 阅读详情

前言

在编程范式中,应用是通过 main() 方法启动的,而 Android 系统与此不同,它会调用与其生命周期特定阶段相对应的特定回调方法来启动 Activity 实例中的代码。

作为最重要的组件,Activity 充当了应用与用户互动的入口点。Activity 提供窗口供应用在其中绘制界面。此窗口通常会填满屏幕,但也可能比屏幕小,并浮动在其他窗口上面。通常,一个 Activity 实现应用中的一个屏幕。

通常,App会指定一个 Activity 为主 Activity,这是用户启动应用时出现的第一个屏幕。然后,每个 Activity 可以启动其他的 Activity,以执行不同的操作,从而形成了页面栈。

Intent 过滤器

Activity 通过 Intent 来启动,Intent 过滤器是 Android 平台的一项非常强大的功能。通过 Intent ,可以显式或隐式请求启动 Activity 。显式请求可以明确指定具体的 Activity ,隐式请求可能会先列举出所有符合条件的 Activity,再经过用户去选择具体用哪一个。

Intent 通过 action (必备)、 category(可选) 和 data(可选)来定义筛选条件。并且可以通过 putExtra(String, Any) 函数来传递一些数据。

putExtra 传递数据
 private Bundle myExtras;
    
    public Intent putExtra(String name, Object value) {
        if (myExtras == null) {
            myExtras = new Bundle();
        }
        myExtras.put(name, value);
        return this;
    } 

putExtra(String, Any)方法内部是通过将数据存入一个 Bundle 对象中,然后在 Activity 的 onCreate 生命周期中取出来供 Activity 使用。

public class Bundle(val mStr: String = "") {
		
    private final Map<String, Object> myMap = new HashMap<String, Object>();

    fun containsKey(String key): Boolean {
        return myMap.containsKey(key);
    }

    fun put(String key, Object value) {
        myMap.put(key, value);
    }

    fun <T: Parcelable> getParcelable(key: String): T {
        Object o = myMap.get(key)
        if (o == null) return null
        try {
            return (T) o;
        } catch (ClassCastException ex) {
            return null;
        }
    }
		// ...
} 

Bundle

Bundle 是一个 HashMap 的装饰类,并且要求 put 进来的元素是可以序列化的,当传入一个不可序列化的对象时,在编译期间会报错:None of the following functions can be called with the arguments supplied.

class Model1()
class Model2(): Serializable

val model1 = Model1()
val model2 = Model2()
activity.startActivity(Intent(activity, BActivity::class.java).apply {
    putExtra("A", model1) // error
    putExtra("B", model2)
}) 

Bundle 不适合保留大量数据,因为它需要在主线程上进行序列化处理并占用系统进程内存。

Bundle 传递参数的数据最大是 1M 左右,数据过大会导致 App 崩溃。

生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x2M6cZ5Z-1656568990594)(https://developer.android.com/guide/components/images/activity_lifecycle.png)]

上面的是官方经典的生命周期流程图,由图中所示,可以看出 Activity 存在三种状态:

  • Activity Launched,启动
  • Activity Running,运行
  • Activity shutdown,关闭

启动过程会经过 onCreate、onStart、onResume ,经过 onResume 后,Activity 处于正常运行状态,直到 onDestroy 执行完成,Activity 关闭。

但是从与用户的交互来看,可以分为三种状态:

  • 可见并可以交互:这个一般指 onResume 到 onPause 之间的状态,也是常说的前台状态。
  • 可见但不可交互:这个是指 onStart 到 onResume 之间和 onPause 到 onStop 之间的状态。
  • 不可见不可交互:这个一般是指 onCreate 到 onStart 及 onStop 到 onDestroy 之间的状态。

用图像表示就是:

与用户交互的状态可以帮助我们来区分 Activity 可能处于的生命周期的状态。例如:在一个 Activity A 上打开了一个透明的新 Activity B,底部的 A 处于可见但不可交互的状态,所以生命周期只会走到 onPause ,不会 onStop。

生命周期方法
  • onCreate

    Activity 会在创建后进入“已创建”状态,该方法在 Activity 的整个生命周期中只应发生一次。

  • onStart

    Activity 进入“已开始”状态,Activity 对用户可见,此方法中的逻辑为 Activity 进入前台并支持交互做准备。

    该方法会非常快速地完成,结束会立刻进入 onResume。

  • onResume

    Activity 进入“已恢复”状态,应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。

    当发生中断事件时,Activity 进入“已暂停”状态。

  • onPause

    Activity 进入“已暂停”状态。从该状态可以回到“已恢复”状态,此方法表示 Activity 不再位于前台(尽管在用户处于多窗口模式时 Activity 仍然可见)。

    处于“已暂停”状态时不应继续(或应有节制地继续)的操作,以及您希望很快恢复的操作。

    • 在 Android 7.0(API 级别 24)或更高版本中,有多个应用在多窗口模式下运行。无论何时,都只有一个应用(窗口)可以拥有焦点,因此系统会暂停所有其他应用。
    • 有新的半透明 Activity(例如对话框)处于开启状态。只要 Activity 仍然部分可见但并未处于焦点之中,它便会一直暂停。

    如果 Activity 变为完全不可见,系统会调用 onStop()。

    进入“已停止”状态后,Activity 要么返回与用户互动,要么结束运行并消失。如果 Activity 返回,系统将调用 onRestart()。如果 Activity 结束运行,系统将调用 onDestroy()。

  • onStop

    Activity 不再对用户可见,说明其已进入“已停止”状态。

  • onRestart

    当 Activity 从 onStop 返回与用户互动时,会先调用该周期,并继续调用 onStart,主要是为了在 onStart 之前供用户做一些拦截处理。

  • onDestroy

    销毁 Activity 之前,系统会先调用 onDestroy()。两种情况会导致:

    • 用户关闭了 Activity 或调用了 finish() 方法。
    • 由于配置更改,例如旋转屏幕或多窗口模式,系统暂时销毁 Activity。

经典问题:Activity A 启动 Activity B,两者生命周期是如何进行的?

A 启动 B:

A#onCreate >> A#onStart >> A#onResume >> A#onPause >> B#onCreate >> B#onStart >> B#onResume >> A#onSaveInstance >> A#onStop

A 先不可交互,然后 B开始进入前台,B进入前台后,A变为不可交互不可见。

B 返回 A:

B#onPause >> A#onRestart >>A#onStart >> A#onResume >> B#onStop >> B#onDestroy

Activity 状态和从内存中清除

系统会在需要释放内存时终止进程;系统终止给定进程的可能性取决于当时进程的状态。反之,进程状态取决于在进程中运行的 Activity 的状态。下面的表中展示了进程状态、Activity 状态以及系统终止进程的可能性之间的关系。

系统终止进程的可能性进程状态Activity 状态
较小前台(拥有或即将获得焦点)已创建
已开始
已恢复
较大后台(失去焦点)
最大后台(不可见)
空已停止
已销毁
保存和恢复瞬时界面状态

用户期望 Activity 的界面状态在整个配置变更(例如旋转或切换到多窗口模式)期间保持不变。但是,默认情况下,系统会在发生此类配置更改时销毁 Activity,从而清除存储在 Activity 实例中的任何界面状态。同样,如果用户暂时从您的应用切换到其他应用,并在稍后返回您的应用,他们也希望界面状态保持不变。但是,当用户离开应用且您的 Activity 停止时,系统可能会销毁该应用的进程。

当 Activity 因系统限制而被销毁时,通过 onSaveInstanceState() 方法,来保存瞬时状态。

当您的 Activity 开始停止时(在执行 onStop 前),系统会调用 onSaveInstanceState() 。

然后,实现在 onStart 方法后执行的 onRestoreInstanceState 方法,而不是在 onCreate 期间恢复状态。

任务与返回栈

任务是用户在执行某项工作时与之互动的一系列 Activity 的集合。这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中。

Android 7.0(API 级别 24)及更高版本支持多窗口环境,当应用在这种环境中同时运行时,系统会单独管理每个窗口的任务;而每个窗口可能包含多项任务。

这种 push-pop 结构同样适用于 Fragment 。

在当前 Activity 启动另一个 Activity 时,新的 Activity 将被 push 到堆栈顶部并获得焦点。上一个 Activity 仍保留在堆栈中,但会停止。

当 Activity 停止时,系统会保留其界面的当前状态。当用户按返回按钮时,当前 Activity 会从堆栈顶部退出(该 Activity 销毁),上一个 Activity 会恢复(界面会恢复到上一个状态)。

堆栈中的 Activity 永远不会重新排列,只会被送入和退出,在当前 Activity 启动时被送入堆栈,在用户使用返回按钮离开时从堆栈中退出。因此,返回堆栈按照“后进先出”的对象结构运作。下图借助一个时间轴直观地显示了这种行为。该时间轴显示了 Activity 之间的进展以及每个时间点的当前返回堆栈。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGDf5KbK-1656568990596)(https://developer.android.com/images/fundamentals/diagram_backstack.png)]

如果用户继续按返回,则堆栈中的 Activity 会逐个退出,以显示前一个 Activity,直到用户返回到主屏幕(或任务开始时运行的 Activity)。移除堆栈中的所有 Activity 后,该任务将不复存在。

这样的栈结构,会导致一个任务的 Activity 序列顺序是固定的,这样一来,同一个 Activity 会多次创建,当然你也可以通过一些设置,来实现回到其中一个或者是重启一个新的任务栈的功能。

管理任务栈

可以通过一些属性来控制 Activity 在任务栈中的行为,包括:

主要的 Intent 的 Flag 有:

  • FLAG_ACTIVITY_NEW_TASK:在新任务中启动 Activity。如果您现在启动的 Activity 已经有任务在运行,则系统会将该任务转到前台并恢复其最后的状态,而 Activity 将在 onNewIntent() 中收到新的 intent。
  • FLAG_ACTIVITY_CLEAR_TOP:如果要启动的 Activity 已经在当前任务中运行,则不会启动该 Activity 的新实例,而是会销毁位于它之上的所有其他 Activity,并通过 onNewIntent() 将此 intent 传送给它的已恢复实例(现在位于堆栈顶部)。
  • FLAG_ACTIVITY_SINGLE_TOP:如果要启动的 Activity 是当前 Activity(即位于返回堆栈顶部的 Activity),则现有实例会收到对 onNewIntent() 的调用,而不会创建 Activity 的新实例。
启动模式

launchMode 有四种属性值:

  • "standard"(默认模式)

    系统在启动该 Activity 的任务中创建 Activity 的新实例,并将 intent 传送给该实例。Activity 可以多次实例化,每个实例可以属于不同的任务,一个任务可以拥有多个实例。

  • "singleTop"

    如果当前任务的顶部已存在 Activity 的实例,则系统会通过调用其 onNewIntent() 方法来将 intent 转送给该实例,而不是创建 Activity 的新实例。

    Activity 可以多次实例化,每个实例可以属于不同的任务,一个任务可以拥有多个实例(但前提是返回堆栈顶部的 Activity 不是该 Activity 的现有实例)。

    需要注意的是,如果 Activity 不在栈顶,那么就会创建新的 Activity 实例;如果在栈顶,才会调用其 onNewIntent() 方法将 intent 交给栈顶的对象来处理。

  • "singleTask"

    系统会创建新任务,并实例化新任务的根 Activity。

    但是,如果另外的任务中已存在该 Activity 的实例,则系统会通过调用其 onNewIntent() 方法将 intent 转送到该现有实例,而不是创建新实例。Activity 一次只能有一个实例存在。

    虽然 Activity 在新任务中启动,但用户按返回按钮仍会返回到上一个 Activity。

  • "singleInstance"

    与 "singleTask" 相似,唯一不同的是系统不会将任何其他 Activity 启动到包含该实例的任务中。该 Activity 始终是其任务唯一的成员;由该 Activity 启动的任何 Activity 都会在其他的任务中打开。

无论 Activity 是在新任务中启动的,还是在和启动它的 Activity 相同的任务中启动,用户按返回按钮都会回到上一个 Activity。但是,如果您启动了指定 singleTask 启动模式的 Activity,而后台任务中已存在该 Activity 的实例,则系统会将该后台任务整个转到前台运行。此时,返回堆栈包含了转到前台的任务中的所有 Activity,这些 Activity 都位于堆栈的顶部。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2cIn6px-1656568990596)(https://developer.android.com/images/fundamentals/diagram_backstack_singletask_multiactivity.png)]

taskAffinity 亲和性

taskAffinity 表示 Activity 倾向于属于哪个任务。taskAffinity 属性采用字符串值,该值必须不同于 manifest 元素中声明的默认软件包名称,因为系统使用该名称来标识应用的默认任务亲和性。taskAffinity 实际上就是用来给 Activity 指定任务的标签。但是需要配合特殊场景使用。

taskAffinity 可在两种情况下发挥作用:

  • 当启动 Activity 的 intent 包含 FLAG_ACTIVITY_NEW_TASK 标记时

    如果传递给 startActivity() 的 intent 包含 FLAG_ACTIVITY_NEW_TASK 标记,则系统会寻找其他任务来容纳新 Activity。通常会是一个新任务,但也可能不是。如果已存在与新 Activity 具有相同 taskAffinity 的现有任务,则会将 Activity 启动到该任务中。如果不存在,则会启动一个新任务。

  • 当 Activity 的 allowTaskReparenting 属性设为 "true" 时

    在这种情况下,一旦和 Activity 有相同 taskAffinity 的任务进入前台运行,Activity 就可从其启动的任务转移到该任务。

使用场景

如果一个 APK 文件中包含了就用户角度而言的多个“应用”,(一个 App 安装后会在 launcher 中存在多个图标)您可能需要使用 taskAffinity 属性为每个“应用”所关联的 Activity 指定不同的亲和性。

清除返回栈

如果用户离开任务较长时间,系统会清除任务中除根 Activity 以外的所有 Activity。当用户再次返回到该任务时,只有根 Activity 会恢复。系统之所以采取这种行为方式是因为,经过一段时间后,用户可能已经放弃了之前执行的操作,现在返回任务是为了开始某项新的操作。

您可以使用一些 Activity 属性来修改此行为:

  • alwaysRetainTaskState

    如果在任务的根 Activity 中将该属性设为 "true",则不会发生上述默认行为。即使经过很长一段时间后,任务仍会在其堆栈中保留所有 Activity。

  • clearTaskOnLaunch

    如果在任务的根 Activity 中将该属性设为 "true",那么只要用户离开任务再返回,堆栈就会被清除到只剩根 Activity。也就是说,它与 alwaysRetainTaskState 正好相反。用户始终会返回到任务的初始状态,即便只是短暂离开任务也是如此。

  • finishOnTaskLaunch

    该属性与 clearTaskOnLaunch 类似,但它只会作用于单个 Activity 而非整个任务。它还可导致任何 Activity 消失,包括根 Activity。如果将该属性设为 "true",则 Activity 仅在当前会话中归属于任务。如果用户离开任务再返回,则该任务将不再存在。

在当前会话中归属于任务。如果用户离开任务再返回,则该任务将不再存在。

最后

如果大伙有什么好的学习方法或建议欢迎大家在评论中积极留言哈,希望大家能够共同学习、共同努力、共同进步。

小编在这里祝小伙伴们在未来的日子里都可以 升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰!!

不论遇到什么困难,都不应该成为我们放弃的理由!

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,需要一份小编整理出来的学习资料的关注我主页或者点击扫描下方二维码免费领取~

这里是关于
我自己的Android 学习,面试文档,视频收集大整理**,有兴趣的伙伴们可以看看~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

Clipper库中文帮助文档 引言: 第一次接触Clipper,主要是想用来处理DXF中的图形,网上也有博友翻译过,但是可惜打不开,好像那个网站https://love2.io凉凉了,但是优快云上也有博友分享了CHM,看着只剩3个下载币的我好无奈,一怒之下花费两天的时间将英文CHM也翻译了一遍,主要还是想在翻译的同时好好的理解Clipper,为使用打下坚实的基础。当然我也会无私的奉献出来。 简单的认识一下Clipper:... 阅读详情

相关推荐

【飞控】MATLAB中UAV Toolbox Support Package for PX4 Autopilots和Pixhawk Pilot Support Package (PSP) 的关系?

区分UAV Toolbox Support Package for PX4 Autopilots和Pixhawk Pilot Support Package (PSP)

m0_58373406的博客 739

None of the following functions can be called with the arguments supplied: public constructor ViewM

ViewModel

彬sir哥的博客 2165

深入NAND Flash信号与接口:结合ONFI 5.0协议,聊聊DBI、ODT和差分信号到底在解决什么实际问题

本文深入探讨了NAND Flash信号与接口设计,结合ONFI 5.0协议,详细解析了DBI、ODT和差分信号等技术如何解决高速数据传输中的信号完整性问题。通过实际案例和数据,展示了这些技术在降低功耗、减少噪声和提升抗干扰能力方面的显著效果,为存储工程师提供了宝贵的实践参考。

weixin_33736649的博客 344

Kotlin源码编译报错,提示@UnsupportedAppUsage和@SystemApi声明的Java函数无法调用

Kotlin源码编译问题

zoujin6649的博客 4300

rk3568 RGMII KSZ8795 MAC TO MAC

参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》

明天乌儿会歌唱 6496

PRD撰写效率翻倍秘籍:我是如何用大模型+飞书文档搭建自动化工作流的

本文分享了如何利用大模型与飞书文档构建自动化工作流,以大幅提升PRD撰写效率。通过结构化需求输入、设计模块化提示词模板,并借助自动化脚本桥接数据与文档,产品经理可将繁琐的文档撰写工作自动化,从而将精力聚焦于产品战略与用户洞察。

weixin_28520495的博客 406

kotlin中Activity跳转

问题描述: override fun onClick(widget: View) { val intent = Intent(AActivity.this, BActivity::class.java) startActivity(intent) } 上面这个在kotlin中会报以下错: None of the following functions can be called ...

guangdeshishe的博客 5524

Blender.粒子效果

Blender.粒子效果 ✦ shift+A新建一个棱角球,细分(之后要分解成许多小颗粒) ✦ 给球添加粒子系统,这时播放粒子会向下掉,力场权重☛重力☛0后,粒子会在球体周围运动 ✦ shift+A添加一个力场,调整力场强度 ✦如果粒子运动太快,我们可以在输出属性中调整时间重映射的原始值 ✦想让粒子在球周围运动而不是发散出去,在物理属性找到力场设置,调整流的大小 ✦S键将球形缩小到看不见 ✦给粒子变添加立方体的形状,在粒子属性里找到渲染选项,将“光晕”改为“物体”,在实例物体中选择新建的立方

weixin_46385629的博客 6669

都掌握了吗?Kotlin技能小成

前些文章描述了 Kotlin教程,包括一些基本语法。 很多时候,还需要加以练习。 本文将开发过程中,遇到的点,整理成线,继而到面 希望 把下面的问题掌握之后,掌握Kotlin在Android中的开发能力 1️⃣实现findViewById有几种方式? 方法一:可以更低成本从java转kotlin @BindView(R2.id.acco_refresh_layout) lateinit va...

王学明 5149

Win11右键菜单显示更多选项设置默认展开方法

在Windows 11操作系统中,用户可能会发现右键点击桌面空白处时,弹出的菜单中仅显示“显示更多选项”,而并非直接展示所有可用的选项。这对于希望快速访问特定功能的用户来说,无疑增加了一些不便。为了优化这一体验,本文将介绍两种简单的方法,帮助用户设置Win11右键菜单,使其默认展开包含的所有选项。通过上述两种方法,用户可以轻松地将Win11右键菜单设置为默认展开所有选项,从而提高工作效率和便捷性。希望这篇文章对你有所帮助!

nntxthml的博客 1万+

YOLOv5s模型训练全流程解析:从数据准备到实战检测

本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。

weixin_29041767的博客 334

android 隐式启动服务,安卓Activity隐式启动全面解析

前言安卓有两种方式启动Activity,一种是显示启动,另外一种是隐式启动。显示启动我们在项目中经常用到,大家也都比较熟悉。今天我们主要讲解一下隐式启动。隐式启动常用于不同应用之间的跳转(例如打开支付宝微信的支付页面),也可用于H5与native之间的交互。隐式启动就是action,category和data的匹配,我们先来说下匹配的规则,然后通过具体的例子去验证。匹配规则action的匹配规则a...

weixin_39610956的博客 1970

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6641

[安卓] 深度掌握Android Activity:生命周期与核心机制全解析

Activity作为Android四大组件之首,是Android应用开发中最核心的界面载体。理解Activity的生命周期和运行机制,是构建稳定、高效Android应用的基石。今天我们就用Kotlin代码来彻底搞懂Activity的方方面面!

2301_77946674的博客 1116

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android activity 按钮,Android之Activity全面解析

前言基于最近要准备去面试,特意系统的复习了下Android基础,看到Activity这块时,发现很多都忘了,而且之前也没有系统的学习和写笔记记录,所以,特此写下这篇关于Activity的一些理解,旨在帮助大家更好的理解Activity.Activity是什么?Activity是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些...

weixin_36403165的博客 480

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android之Activity全面解析

前言 基于最近要准备去面试,特意系统的复习了下Android基础,看到Activity这块时,发现很多都忘了,而且之前也没有系统的学习和写笔记记录,所以,特此写下这篇关于Activity的一些理解,旨在帮助大家更好的理解Activity. Activity是什么? Activity是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互...

Darry_R的博客 629

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android源码解析系列1——Activity启动和界面加载,安卓游戏开发

在scheduleLaunchActivity方法中,首先创建了一个ActivityClientRecord对象,并对其进行赋值。 ActivityClientRecord:用于记录与Activity相关的数据。 然后通过Handler,将线程由Binder线程切换到主线程。最终调用到ActivityThread的handleLaunchActivity方法。 public final class ActivityThread { // 省略部分代码 private void handleLaunchA

m0_66264169的博客 299

【Android】源码解析Activity的结构分析

简单介绍了Activity的结构,以及Activity,Window,View之间的管理。

摸鱼小小虫的博客 2207

android中activity类的作用,Android Activity全面解析

从实习到现在,工作了也快一年了,期间过程也碰到和解决了不少的问题,我的为知笔记上也积累了许许多多零零散散的知识点。个人觉得还是有必要将这些零碎的知识点整体梳理总结一遍这样才能真正的转化成真正的技术积累。所以这个专题我主要就是对Android的一些常用知识点以及开发当中遇到的各种问题进行一些梳理与总结。首先,就从Android四大组件Activity开始。1.Activity生命周期方法完全解析ac...

weixin_39600447的博客 1084

android之activity全面解析,来自阿里巴巴佛系安卓程序员的指南

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。所以,长征路还长,大家还是好好地做个务实的程序员吧。最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84149916的博客 888

【Android】源码解析 Activity 的构成

基于 Android 14 的源码解析。

Creativity + Efficiency = Success 1116

对于安卓开发中activity的四种启动模式的简单解析

对于安卓开发中activity的四种启动模式的简单解析为什么使用启动模式开始使用启动模式四种启动模式介绍四种启动模式使用场景 为什么使用启动模式   在我们安卓开发过程中大家一定遇到过各种小问题,让人摸不着头脑。比如在我们编写好了登陆页面之后,模拟登陆,在网速比较慢时就会着急多点几次登陆按钮,之后进入主页面之后就会发现按手机的返回键时会返回好几个主页面,这就是我们在点击登陆时创建了太多的主页面的实例导致的小问题,但这种问题修改一下主页面的启动模式就可以很好的解决。 开始使用启动模式   有过android

qq_41167962的博客 459

Android Activity栈关系解析

→ 管理多个 ActivityDisplay(每个屏幕一个)→ 每个 ActivityDisplay 管理多个 ActivityStack→ 每个 ActivityStack 管理多个 TaskRecord→ 每个 TaskRecord 管理多个 ActivityRecordActivityRecord 是砖块,TaskRecord 是房间,ActivityStack 是楼层,ActivityDisplay 是整栋楼,ActivityStackSupervisor 是物业总公司。

猿小蔡的博客 997

android全面解析简书,Android之Activity全面解析

前言基于最近要准备去面试,特意系统的复习了下Android基础,看到Activity这块时,发现很多都忘了,而且之前也没有系统的学习和写笔记记录,所以,特此写下这篇关于Activity的一些理解,旨在帮助大家更好的理解Activity.Activity是什么?Activity是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些...

weixin_42396502的博客 161

android之activity全面解析

当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。

2401_87029603的博客 1928
上一篇: OkHttp 解析
下一篇: Android Framework重要服务之InputManagerService(二) inputReader
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值