会 Android 又会 iOS 的朋友请进

2019-05-21 21:26:46 +08:00
 KunMinX
最近在复盘 Android 知识,借此机会我想了解一下,同是移动端解决方案,Android 和 iOS 在应对各种场景的策略区别在于哪些地方?

如果能推荐一本深入浅出讲这些缘起、经过、对策的系统架构方面的书,那我的愿望也就达到了。

因为我是做 Android 的,我来简单说说我对 Android 的理解。

- - - - - - - - - - - - - - - - -

就比如,最开始你只有一部手机硬件,你想在屏幕上渲染,于是封装了底层的一层 Surface Flinger。

你还想窗口,于是你继续在上层封装了 WindowManager 和 Window,每个 Window 映射一块 Surface,并且通过进程通信的方式,去与底层的 WindowsManagerService 通信,来间接调用 SF 在 Surface 上做渲染。

然而 Window 要是亲自去绘制,那就太复杂,于是再另外封装一个 View,View 延伸出 ViewGroup,相互之间通过组合模式构成一个树。每个 Window 都持有一个 ViewTree,那么绘制的工作就直接交给 View 来遍历和完成,我 Window 只需做个管理者,拿到绘制结果,向上级 WM 反映,通过 WM 与 WMS 取得联系,并最终通过 SF 渲染出。

然而,你不仅有窗口,你还想要多窗口,于是通过模板方法模式,去暴露出 Activity 模板,让用户自定义实际上是一个个窗口的 Activity,而多窗口之间的切换、通信等关系,则由系统机制来把握。

所以为了渲染、为了窗口、为了绘制、为了多窗口,Android 设计了这么些套路,那么 iOS 又是怎样的呢?它是否存在窗口的概念呢?它是依靠什么来绘制的呢?它是怎么管理多窗口的呢?
10324 次点击
所在节点    Android
9 条回复
CoCoMcRee
2019-05-21 22:48:08 +08:00
一般情况下 iOS 是一个窗口 UIWindow, 多个视图控制器 UIViewController, 视图控制器里有各种各样的控件,基本都继承自 UIView.

iOS 上画界面, 开发者其实也是在定义一个一个的 UIView 对象, 一般不需要去介入到绘制的过程中,除了一些特殊功能的开发.

和安卓上的控件很多也是对应的,
安卓有 ListView,GridView, iOS 有 UITableView
安卓有 RecyclerView,GridView, iOS 有 UICollectionView
cht
2019-05-21 22:51:12 +08:00
KunMinX
2019-05-21 23:15:51 +08:00
@CoCoMcRee @cht1995 感谢回复。

刚刚看了 @cht1995 提供的官方文档,上面写着每个 UIWindow 恰好对应着一个 root ViewController,那我想这个 ViewController 对应的就是 Android 下的 Activity。或许也是 UIWindow 的一种模板方法模式的实现。
mmdsun
2019-05-22 08:23:37 +08:00
KunMinX
2019-05-22 11:20:56 +08:00
@mmdsun 厉害了!
wxl1380610
2019-05-22 13:12:22 +08:00
基本上 差不多
cjh1095358798
2019-05-22 17:12:50 +08:00
老哥 android 理解的挺透彻的
lyxung
2019-05-22 18:22:35 +08:00
游戏引擎是怎么搞的,不适用这一套架构吧。用的 opengl 的一套 api ?
lyxung
2019-05-23 15:08:57 +08:00
惨案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/566348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX