Android
Android
Android
人手一个的 “手机”
曾经可不是今天的样子!
Android
我上大学的时候在用什么手机?
Nokia 5310 XpressMusic (2007): 320 x 240 Screen; 2 MP Camera; 30 MB Storage (非常精细)
Symbian S40 (相比于 “功能机” 已经是巨大的进步了)
Android
Symbian 和 J2ME 的时代
没变的是上课和现在一样无聊
The K Virtual Machine (KVM) & J2ME
Android
那个男人改变了世界
Android
那个男人遇到了对手
Google 2005 年收购了 Android Inc.,初创团队有一些 BeOS 的成员 (例如 Binder IPC 就来自 BeOS)
Android
Android 的兴起
Linux + Full JVM + Framework API + 开放平台
Dalvik VM
→
\to
→
Android Runtime @ 5.0
那么,代价呢?
卡到爆啊!
HTC G1: Qualcomm MSM7201
32-bit ARMv6 @ 528MHz (1 CPU, TSMC 90nm)
顺序八级流水线 (IPC < 1),地图都会卡
但这其实是一个高瞻远瞩的决定
他们赌摩尔定律会生效
!(同年: i7-965, 4C8T, 6 发射)
Symbian: 暴毙于 C++; Windows Phone: 暴毙于 C#
(其实也许熬到网页时代,就都能活下来了)
Android
One More Comment
初期的 “低性能” 总会解决的
算法 (软件) 会进步
硬件也会进步
摩尔定律还没死呢!
在大语言模型时代,同样成立
600B 模型能做到的,30B 的模型也能做到
一定存在一个临界点,能实现 “实时推理无处不在”
Android
Android Apps
首先,是一个 Java 程序 (Kotlin)
其次,有运行模型
Android Platform APIs
android.view.View
: “the basic building block for user interface components”
android.webkit.WebView
- 嵌入应用的网页
android.hardware.camera2
- 相机
android.database.database
- 数据库
四大组件:Activity, Service, ContentProvider, BroadcastReceiver
Android
Platform API 之下:一个 “微内核”
Android
例子:Binder IPC
Remote Procedure Call (RPC)
remote.transact()
在性能优化和易用之间的权衡
注册机制
相比之下,管道/套接字就太 “底层” 了,需要手工管理的东西太多
基于共享内存实现
Linux Kernel binder driver
Copy once
服务端线程池
Android
例子:Activity Stack
在微信拉起知乎,知乎可以返回到微信
这行为在 “切换应用” 后仍能保持
与窗口管理器的 Alt + Tab 稍微不同