为啥 Xamarin Forms 对所有页面使用一个 Activity

Posted

技术标签:

【中文标题】为啥 Xamarin Forms 对所有页面使用一个 Activity【英文标题】:Why does Xamarin Forms uses one Activity for all Pages为什么 Xamarin Forms 对所有页面使用一个 Activity 【发布时间】:2018-08-09 03:49:09 【问题描述】:

Xamarin Forms 使用一个 Activity 来呈现所有页面。基本上,页面是 android 子视图或片段。为什么不让每个页面都是一个活动?这与 Xamarin 表单在 ios 上的表现形成鲜明对比。在 iOS 上,Page 是 UIViewController。

我不是在问 Xamarin Forms 在 Android 中是如何工作的(它使用片段)。

Xamarin 为什么选择这样做?我相信有一些架构选择?

【问题讨论】:

【参考方案1】:

如果我弄错了,请有人纠正我,我认为 Xamarin.Forms 在 Android 上的片段反向移植之前就开始了,但其编写方式类似于片段使用视图的工作方式。

但是,如果您使用 AppCompatFormsAppCompatActivity 作为 MainActivity,我认为这种情况已经改变,现在它确实使用原生 Android Fragment 来保存表单页面。

我对为什么这样做的最佳猜测是为了更好地管理内存并确保正确处理不再使用的任何视图或对象。此外,至于为什么Activity 不用于Page,这可能是因为它使创建导航更容易在Xamarin.Forms 本身而不是本机中完成。例如,当使用TabbedPage 时,将表单页面(即视图)添加到片段中以供原生 Android ActionBar 使用可能比尝试使用表单页面(如果每个页面都是单独的活动)更容易.

【讨论】:

是的,我认为他们正在使用片段,但这不是我的问题。我的问题是为什么在 Android 上没有任何 Page 一个 Activity,而在 iOS 上一个 Page 是 UIViewController 的原因? Xamarin Forms Android 中有很多代码会动态更新活动栏元素:箭头按钮、标题、选项按钮,每个按钮都取决于当前页面。为什么所有这些都适用于 Android 而不是 iOS? 我更新了我的答案,但实际上并没有询问一位亲自参与其中的 Xamarin 员工,为什么它以这种方式实施,这实际上只是一个猜谜游戏。

以上是关于为啥 Xamarin Forms 对所有页面使用一个 Activity的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 更改应用程序的背景颜色

3Xamarin Forms 调整安卓TabbedPage 下置

无法滚动在移动设备上使用 Xamarin.Forms 创建的 xaml 页面

为啥横向模式下的扩展布局在 Xamarin Forms 中显示半黑屏?

如何在 Xamarin.Forms 的主页上禁用主页点击手势而不是其他页面?

Xamarin.Forms 页面底部到顶部动画