0%

游戏复盘

Read more »

摘录

💪每個人都像一個空的瓶子,裡面裝什麼東西,都是由你自己決定,當你覺得哪些東西你不想要了,把它倒掉,但這個瓶蓋只有你自己才擰的動!

Read more »

游戏启动篇

CP视角

游戏App分为2种类型,分包与整包。
游戏模式可以大致分成2类,测试模式(内网)与线上模式(外网)。

  • 游戏的初始化
  1. 检查游戏版本更新
  2. 1 一般是通过利用SVN主分支的版本号,进行线上环境游戏资源的更新。
  3. 2 获取有序更新URL

2.加载本地资源


SDK视角

技术文章参考

https://xiaozhuanlan.com/topic/0213584967

进程模式

Android 平台的 App,通常情况下都是单进程。

由于 Android 平台资源有限,需要为不同进程设置优先级,以便在系统资源紧张的情况下,将优先级较低的进程杀死,以释放资源。

因而,进程模式的存在就是为了标记和区分进程的优先级。

存在哪几种进程模式?

按优先级从高到低,进程模式主要包含:

前景进程、可见进程、服务进程、背景进程、空白进程 这 5 大类别

https://images.xiaozhuanlan.com/photo/2021/a1e4a82bc9771970300307a37fcd2476.png

通常,App 进程的级别,由其活跃的或处于栈顶的组件的活动状况(比如所处生命周期)决定。

例如,当一个 App 的 Activity 处于 onResume,那么该 Activity 所在的整个进程都会成为前景进程。

划重点 👆 👆 👆

于此同时,需要再次强调的是,当系统回收资源时,针对的是 App 的进程,而不是针对 App 进程中的某个组件。(此处对应文末的 “辟谣 2”)

划重点 👆 👆 👆

前景模式、可见模式,二者的区别?

由于手机屏幕空间有限,一次只能展示一个窗口,但如果你拿 PC 来考虑,就不难理解为何要同时存在 “前景” 和 “可见” 这两种概念。

前景模式就相当于 PC 中 “获得焦点” 的窗口。

可见模式即是那些你可以看见,但 “失去焦点” 的窗口

官方的可见模式的含义

可见模式,不如我们称其为 “失焦模式”
为保持称谓的一致,本文在正文中沿用了 “官方文档” 对其所定义的各进程模式的称谓,同时本文也另辟蹊径地通过 “类比” 的方式来分析 “前景”、“可见” 等模式的本质和设计依据。

为此有小伙伴在理解了本文思路后,因官方 “可见模式” 这个概念的语义而产生困扰,毕竟确实如其所说,从字面上看,“可见” 即包含了 “前景可见” 和 “被部分遮挡但可见” 这两种情况,

其实我个人猜测,所谓 “前景模式” 和 “可见模式” 的概念,大概率是继承于 PC 操作系统中窗体的相关概念,然而 Android 又不想和它重名,就像鸿蒙手机系统的 Framework “换汤不换药” 地将 Activity 等组件改名为 Ability 一样,

因而综上,我们不妨结合本文的思路,来给 “可见模式” 取个更为恰当的名称 —— “失焦模式” —— 失去焦点的模式,与之相对的就是 “获焦模式”,这样无论从哪个角度来看,都是恰当的,毕竟 获焦或失焦隐含的潜台词就是 “页面已经可见了”。

Activity 被系统回收

系统回收的是进程,系统回收的是进程,系统回收的是进程!
重要的事情要讲三遍 👆👆👆

请不要再使用 “Activity 被系统回收” 等与客观实际有一定出入的描述(尤其在面试时,因为此处无意间流露了对 “计算机操作系统” 等基础知识的掌握程度,容易给人留下专业基础不扎实的印象。当然如果你是有意借此试探面试官的反应,看他到底 “行不行”,那就当我没说)

具体而言,如果 Activity A 和 B 分属于同一个 App 的两个进程,且 A 在后台进程,那么内存不足时 A 可能因为进程被回收而 受牵连;而如果 A 和 B 在同一个进程内,且 B 乃至 B 所处的进程处于前景或可见,那 A 则不会 受牵连。

简言之,这类事情的本质是 “进程被系统回收”。也即,只要 Activity 是保持在 Stop 而未步入 Destroy(例如处于非栈顶的位置),那么该 Activity 此时 “被回收” 只可能是因为所在进程被系统回收。

划重点 👆👆👆

如何理解Android手机内存

技术文章参考

https://time.geekbang.org/column/article/86089

管程

1.管程是一种概念,任何语言都可以通用。

java采用的是管程技术,synchronized 关键字及 wait notify notifyAll 三个方法都是管程的组成部分。

而管程和信号量是等价的,所谓等价指的是用管程能够实现信号量,也能用信号量实现管程。

管程,对应的英文是 Monitor,很多 Java 领域的同学都喜欢将其翻译成“监视器”,这是直译。操作系统领域一般都翻译成“管程”,这个是意译,而我自己也更倾向于使用“管程”。

MESA模型

java管程实现参考的是MESA模型。

有两大核心问题:
一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。

管程解决“互斥”问题的解决方案

管程解决互斥问题的思路很简单,就是将共享变量及其对共享变量的操作统一封装起来。

假如我们要实现一个线程安全的阻塞队列,一个最直观的想法就是:将线程不安全的队列封装起来,对外提供线程安全的操作方法,例如入队操作和出队操作。