ios / android 程序里头,不同 view 之间的切换是怎样的机制

2016-04-08 09:35:03 +08:00
 ChefIsAwesome

最近在做单页面的 web app ,处理不同 view 之间的切换折磨死我了。想听听其他平台是怎么做的。

比方讲 app 是这样一个树形结构:

{
  电视剧: {
    美剧,
    日剧,
  },

  电影: {
    中国电影,
    美国电影,
  }
}

刚进入程序的时候,我在电视剧这个 view 。

点击美剧,新的 view 出来。这个新的 view 是在点击的时候创建并且渲染的吗?不管 ios 还是 android ,几乎都是点击的瞬间新的 view 就以动画的方式进来了,如果是新创建的,那渲染速度岂不是非常快。

切换到电影,进入中国电影,再切换回电视剧,这时候我还在美剧这个 view :

1643 次点击
所在节点    问与答
5 条回复
Shura
2016-04-08 09:41:09 +08:00
Android 有个后退栈,和你打开 activity 的顺序有关
wohenyingyu01
2016-04-08 10:28:31 +08:00
要看你怎么切了,安卓里面如果只切 fragment 不切 activity 的话,完全可以在 activity 的里全部预先载入好,随便你切都不会重新加载,需要自己管理历史栈或者直接无视,切 activity 就是切了才渲染,系统自动帮你加入栈,也可以自定义后退按钮的效果。
ios 里面也有栈,好像需要有 navigation controller 的界面才可以被 push ,被 push 后有特定效果,比如左滑后退,基本全部是系统帮你管理,或者直接用 insert subview 的方式手动切换
orange9
2016-04-08 11:01:22 +08:00
android 的话 viewpager+fragment 默认预加载 源代码显示最少为 1
hahasong
2016-04-08 11:18:09 +08:00
每个安卓应用有一个回退栈,系统维护栈,后进先出, A 调起 B , B 切出去返回 A 的时候, B 的状态是不用记录的, A 的会被记录,因为 A 还有恢复的可能性, B 不会恢复了。如果 B 上的操作对 A 的显示会有影响,就需要 B 和 A 通信,告诉 A 恢复的时候去更新 UI 。有个 OnActivityResult 回调方法。现在流行用 2 楼说的 Fragment 片段, Activity 不变,页面不销毁,只是内嵌的 Fragment 在切换, Fragment 也有一个回退栈,需要自己主动选择加入。同时 Fragment 之前也有通信的方法, Fragment 和父 Activity 之间都有通信方法

ios 则是继承 NavigateViewController 来实现在多级 view 之前切换,它维护了一个 view 的数组,相当于安卓的回退栈,数组的最后一个 view 总是当前被显示的。 view 之前的切换,该 viewController 的实例是一直存在的,所以数据都在,需要更新显示,就调对应 view 的 setNeedDisplay 方法更新一下数据
hahasong
2016-04-08 11:21:12 +08:00
@hahasong 有错字,前=间。总之就是移动端,很多东西都是系统帮你做了

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

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

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

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

© 2021 V2EX