游戏复盘
编程指南
计算机-固态硬盘
本文章含有视频
计算机-芯片
理财
Symbols count in article: 193 Reading time ≈ 1 mins.
💪每個人都像一個空的瓶子,裡面裝什麼東西,都是由你自己決定,當你覺得哪些東西你不想要了,把它倒掉,但這個瓶蓋只有你自己才擰的動!
游戏商务-启蒙
Symbols count in article: 737 Reading time ≈ 1 mins.
复盘
游戏篇章-AAB实践说明
Android Application Bundle 简介
游戏篇章-Unity与SDK交互
Symbols count in article: 128 Reading time ≈ 1 mins.
Untitled
Symbols count in article: 1.4k Reading time ≈ 1 mins.
技术文章参考
https://xiaozhuanlan.com/topic/0213584967
进程模式
Android 平台的 App,通常情况下都是单进程。
由于 Android 平台资源有限,需要为不同进程设置优先级,以便在系统资源紧张的情况下,将优先级较低的进程杀死,以释放资源。
因而,进程模式的存在就是为了标记和区分进程的优先级。
存在哪几种进程模式?
按优先级从高到低,进程模式主要包含:
前景进程、可见进程、服务进程、背景进程、空白进程 这 5 大类别
通常,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手机内存
Untitled
Symbols count in article: 465 Reading time ≈ 1 mins.
技术文章参考
https://time.geekbang.org/column/article/86089
管程
1.管程是一种概念,任何语言都可以通用。
java采用的是管程技术,synchronized 关键字及 wait notify notifyAll 三个方法都是管程的组成部分。
而管程和信号量是等价的,所谓等价指的是用管程能够实现信号量,也能用信号量实现管程。
管程,对应的英文是 Monitor,很多 Java 领域的同学都喜欢将其翻译成“监视器”,这是直译。操作系统领域一般都翻译成“管程”,这个是意译,而我自己也更倾向于使用“管程”。
MESA模型
java管程实现参考的是MESA模型。
有两大核心问题:
一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。
管程解决“互斥”问题的解决方案
管程解决互斥问题的思路很简单,就是将共享变量及其对共享变量的操作统一封装起来。
假如我们要实现一个线程安全的阻塞队列,一个最直观的想法就是:将线程不安全的队列封装起来,对外提供线程安全的操作方法,例如入队操作和出队操作。