Activity是界面还是容器???
📌 Activity是什么?
</aside>
-
先回答标题的问题:Activity是一个容器,一个装载视图的容器
Activity是一个可以用来跨进程的组件,管理视图的状态和逻辑(渐渐被小弟Fragment代替)以及他的另一个使命多窗口的跳转和通信
番外:Activity的前世今生
-
从原始指令到专职渲染再到排版再到管理多窗口跳转和通信
原始指令:在HAL层通过指令将我们想要的UI渲染在屏幕上
专职渲染:在运行时层通过C/C++封装Surface Flinger将渲染工作交给他
专心排版:在Java的框架层封装Window,专门负责排版
过于繁忙:通过组合模式封装View/ViewGroup减轻Window的负担
过于优秀:因为View/ViewGroup过于优秀导致Window无事可做
需求变化:Window正式改名Activity通过模板方法模式简化多窗口的跳转和通信
📌 Activity解决了什么问题?
</aside>
了解了Activity是什么之后,就应该清楚了,Activity的职责就是管理多窗口跳转和通信,顺带管理View的状态和逻辑,Activity的出现就是简化了我们对多窗口管理的麻烦。这一切归功于Activity的模板方法模式
📌 Activity中你必须掌握的点!!!
</aside>
-
生命周期
-
跳转和通信
-
视图加载和优化
生命周期为什么会出现???
因为在某些关键的生命节点会干一些重要的事情,就比如人在未成年的时候就会去读书学习在成年之后就会去想着赚钱再之后就是结婚生子,说白了就是每一段的生命周期任务不一样,那么Activity到了一个关键节点,就可以允许我们做一些事情,比如保存数据或者发送网络请求等等。现在你应该明白了为什么会出现生命周期了吧:给我们一个窗口,让我们有机会再关键的节点做该做的事
聊生命周期之前我们先看看进程模式
进程?进程模式?
进程:一个APP运行起来就可以简单的当作一个进程
进程模式:系统的内存是有限的,所以需要区分哪些进程有用,哪些进程没用,在内存吃紧的时候将那些没多大用的进程回收掉,然后把空出来的内存给有用的进程用,所以进程模式的作用就是:区分进程的优先级
进程模式有哪些???
按照优先级的顺序从高到低:前景模式 → 可见模式 → 服务模式 → 背景模式 → 空白模式
进程的优先级取决于进程中组件的活跃状态,只要有一个还处于前台那么他就是前景模式。
生命周期又有那些???
-
官方图
-
简易图
Activity的宿命是不断的在生命周期之间轮回等待一位有缘人将其销毁
让我们将进程模式和生命周期进行对应
-
对应图
我们来给前景模式取个新名字 获焦模式 : 获得整个屏幕的焦点
可见模式 → 失焦模式 : 屏幕上可见但是没有获取焦点
页面跳转和通信
-
其实这里的跳转和通信不仅仅局限于Activity与Activitiy之间,也可以是Activity和Fragment,Activity和其他四大组件
这里我先来谈谈Activity与Activity之间的跳转和通信
前文我们已经知道 Activity是跨进程的组件,所以不仅要可以跳转到当前App其他页面的能力,还要有跳转到其他app页面的能力。所以就需要一个信使,在不同进程之间传递消息,那么Intent就应运而生 本篇文章是讲解Activity的所以对于Intent的讲解就点到为止
启动模式
-
说到跳转,就不得不说说启动模式了推荐大家看看这个视频强烈建议多看几遍
看完视频后我们来总结一下:
-
standard 以及 singleTop 用于app内跳转
-
singleInstance 用于app间跳转
-
singleTask 既可用于应用间也可用于应用内
我们来好好谈谈任务和回退栈
这里面牵扯到三个东西 一个是 ActivityRecord(Activity的相关信息) TaskRecord(栈结构) ActivityStack(栈结构)
-
看图
默认的情况:在ActivityStack中只有一个TaskRecord
通信
未完待续…
加载优化
未完待续…
📌 怎么用?
</aside>
-
基本用法
-
创建一个继承自Activity的类
-
在清单文件中声明
-
调用setContentView将视图装进Activity里
-
不过Android Studio 帮我们一步到位了
-
📌 底层原理
</aside>
-
设计思想 : 模板方法模式 + 组合模式
-
底层源码分析…
如果大家觉得看着有收获,可以关注我的博客 Android老友记持续更新
www.pandaer.space