V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KunMinX
V2EX  ›  Android

会 Android 又会 iOS 的朋友请进

  •  
  •   KunMinX · 2019-05-21 21:26:46 +08:00 · 5147 次点击
    这是一个创建于 1774 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在复盘 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 又是怎样的呢?它是否存在窗口的概念呢?它是依靠什么来绘制的呢?它是怎么管理多窗口的呢?
    9 条回复    2019-05-23 15:08:57 +08:00
    CoCoMcRee
        1
    CoCoMcRee  
       2019-05-21 22:48:08 +08:00
    一般情况下 iOS 是一个窗口 UIWindow, 多个视图控制器 UIViewController, 视图控制器里有各种各样的控件,基本都继承自 UIView.

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

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

    刚刚看了 @cht1995 提供的官方文档,上面写着每个 UIWindow 恰好对应着一个 root ViewController,那我想这个 ViewController 对应的就是 Android 下的 Activity。或许也是 UIWindow 的一种模板方法模式的实现。
    mmdsun
        4
    mmdsun  
       2019-05-22 08:23:37 +08:00 via Android
    KunMinX
        5
    KunMinX  
    OP
       2019-05-22 11:20:56 +08:00 via iPhone
    @mmdsun 厉害了!
    wxl1380610
        6
    wxl1380610  
       2019-05-22 13:12:22 +08:00
    基本上 差不多
    cjh1095358798
        7
    cjh1095358798  
       2019-05-22 17:12:50 +08:00
    老哥 android 理解的挺透彻的
    lyxung
        8
    lyxung  
       2019-05-22 18:22:35 +08:00 via iPhone
    游戏引擎是怎么搞的,不适用这一套架构吧。用的 opengl 的一套 api ?
    lyxung
        9
    lyxung  
       2019-05-23 15:08:57 +08:00 via iPhone
    惨案
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2812 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.