Activity知识点总结,android面试题2024基础

本文详细介绍了Android应用中Activity的启动流程,包括触摸事件处理、不同启动模式(如standard、singleTop等)、ActivityRecord和TaskStack的管理,以及Activity启动模式的设置和与任务的关联。同时概述了Activity从启动到备案、进程创建的过程。
摘要由CSDN通过智能技术生成

分发流程

dispatchTouchEvent -> onInterceptTouchEvent

处理流程

-> onTouch -> onTouchEvent -> onClick

五、Activity启动模式,实现页面自由切换

=====================================================================================

5.1 管理类


ActivityRecord 是AMS用于管理App进程Activity的对象

TaskStack 是管理多个ActivityRecord的栈,栈顶的Activity表示获得焦点的Activity

ActivityStack 是管理多个TaskStack的栈,栈顶的TaskStack表示获取焦点的任务

ActivityStackSupervisior 管理多个ActivityStack,只有一个ActivityStack获取到焦点

5.2 Activity启动模式


1、standard 标准模式直接在TaskStack栈顶创建Activity对象

2、singleTop 如果要启动的Activity在TaskStack栈顶的话,不需要创建Activity,调动onNewIntent onResume,否则就创建一个Activity对象

3、singleTask 如果要启动的Activity在TaskStack栈中存在,将它上面的所有对象出栈,调用onNewIntent onResume,否则就创建一个Activity对象。singleTask模式下,任务取决于清单中配置的taskAffinity

4、singleInstance 启动Activity单独存在在一个TaskStack栈中,并整个应用只有一个这个对象

5.3 设置启动模式


1、在xml中声明android:launchMode

2、使用Intent启动

FLAG_ACTIVITY_NEW_TASK类似singleTask当在清单中为Activity设置taskAffinity属性时,能跳转到指定任务,任务不存在创建任务

FLAG_ACTIVITY_SINGLE_TOP singleTop模式

FLAG_ACTIVITY_CLEAR_TOP类似singleTask,当Activity存在任务中,TaskStack都会出栈,从新创建入栈

FLAG_ACTIVITY_NO_HISTORY 被指定的 Activity 在跳转到其他 Activity 后,将从任务中移除

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 指定Activity不出现在最近应用列表中

5.4 与任务关联


taskAffinity 可指定Activity要关联的任务,默认情况任务名为包名

属性allowTaskReparenting = true 可以让改Activity从一个任务回签到taskAffinity指定的任务

六、Activity启动流程

============================================================================

6.1 启动App的进程


无论是从Context还是Activity启动一个Activity都是调用startActivy,最后调用到Instrumentation的exeStartActivty,通过Binder通知AMS开始做Activity的启动的准备工作,在这里可以Hook Instrumentation实现对启动的Activity的拦截

6.2 AMS准备工作


SystemService进程AMS

1、PMS检测Activity是否存储

2、创建ActivityRecord记录Activity的所有信息

3、创建Token记录视图是否可以显示,通知WMS创建AppWindowToken

4、根据启动模式创建TaskStack

5、检测启动的进程是否存在,检测ProcessRecord ApplicationThread

6、如果不存在进程将ActivityTread作为参数通过socket通信传递给Zygote,开始fork进程

6.3 App进程启动


6.3.1 native层 启动Binder

1、open Binder 打开Binder驱动

2、mmap 内存映射

3、注册线程到Binder驱动

6.3.2 java层

执行ActivityThread main函数 1、Looper.prepareMainLooper 准备主线程 2、创建ActivityThread 3、attach 通知AMS进程创建成功,进行备案 4、Looper.loop 主线程Looper启动

6.4 AMS收到App进程启动消息


赋值ProcessRecord,ApplicationThread,通知App SystemService已经备案成功

6.5 App收到AMS备案成功消息


1、反射Application,关联Context

2、调用attachBaseContext

3、创建ContentProvider 4、调用onCreate

6.6 启动Activity


AMS scheduleLaunchActivity调用启动Activity App进程

1、创建ActivityRecordClient

2、performLaunchActivity

反射创建Activity关联Context

调用attach 创建PhoneWindow 创建WindowManager 关联Window.callback

3、调用onCreate setContentView设置自定义View

4、调用onResume 执行绘制视图流程

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

img
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip204888 备注Android获取(资料价值较高,非无偿)
img

推荐学习资料


  • 脑图
    360°全方位性能调优

获取(资料价值较高,非无偿)**
[外链图片转存中…(img-EOMODX3A-1711535658275)]

推荐学习资料


  • 脑图
    [外链图片转存中…(img-7xGAGRH3-1711535658275)]
    [外链图片转存中…(img-CByPYV5S-1711535658275)]
    [外链图片转存中…(img-X4MiRa8K-1711535658276)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值