原生编程对于移动开发有何优势?

2024-05-03

我需要为一家公司在一些主要的移动操作系统上开发应用程序,特别是 iOS、Android 和 WP7。

我最初计划为三种不同的操作系统编写三个独立的应用程序 - 每个应用程序都使用本机 SDK。

然而,这样做有什么好处吗?有许多可用的跨平台工具 - Sencha、Phonegap、Rhodes 等。他们创建的应用程序跨设备感觉如何“原生”?他们有什么样的硬件集成(相机、GPS、本地存储等)?

我没有时间限制,并且如果这样做有任何优势的话,开发三个本机应用程序绝对没有问题。

编辑:如果重要的话,这些应用程序将同时具有在线和离线功能。


免责声明:我一直在跟踪您提到的跨平台工具,但从未用它们构建过任何东西。如果您读完这篇文章,您可能会猜到目前我主要是一名 Android 开发人员。

答案是:视情况而定。原生应用程序当然有优势,但问题是您是否关心(或足够关心)这些优势,从而产生针对多个平台进行开发的开销。由于您没有详细说明您计划构建哪种类型的应用程序,因此我将向您简要介绍一下我所知道的内容。

我假设您正在谈论基于 HTML 的跨平台解决方案(例如PhoneGap http://phonegap.com/, Sencha http://www.sencha.com/, and Rhodes http://rhomobile.com/)而不是像跨平台游戏导向的平台科罗娜SDK http://www.anscamobile.com/corona/ or Moai http://getmoai.com也不是总是有趣的 Mono 通过单点触控 http://xamarin.com/monotouch and 适用于 Android 的单声道 http://android.xamarin.com/。我也排除Titanium http://www.appcelerator.com/不支持 Windows Phone。

我发现原生解决方案和 HTML 跨平台解决方案之间的一些差距如下:

  • 用户界面熟悉程度
  • 性能(尤其是 UI)
  • 兼容性
  • 调试
  • 平台API

用户界面熟悉程度

每个平台的用户都会对事物的运作方式产生一定的期望。 iOS 中的应用程序通常具有某些 UI 范例(顶部带有左侧后退按钮的栏,那些圆桌/列表 UI 等),Android 中的应用程序可能有另一个(例如 ActionBar,它类似,但不完全一样)与 iOS 栏相同,或长按上下文菜单中的项目),Windows Phone 用户还有另一种(平铺和全景视图)。如果您生成相同的 HTML UI,您可能无法利用它。对于通常不会花时间学习多个平台的用户来说,这些熟悉的 UI 模式使应用程序更加直观和舒适。

表现

Native 的另一个优势是性能,尤其是与 UI 相关的性能,无论是原始图形渲染能力还是计算能力。如果您有简单的 UI,这可能并不重要,但如果您有复杂的动画 UI,那么有些事情可能最终不会那么顺利。在 Android 中尤其如此,因为 Android 上有各种各样的设备,其中包括一些功耗相当低的设备。

兼容性

使用 HTML 跨平台工具的另一个缺点是不同的手机以不同的方式处理 HTML/CSS/JavaScript。这很有趣,因为这是一把双刃剑。一方面,HTML 本质上是跨平台的,这很好,但另一方面,您仍然遇到烦人的设备相关问题。在 Android 中尤其如此,那里有如此多不同的设备,并且制造商喜欢修补WebView由于某种原因。最终你会遇到一些小错误,某些设备会做一些奇怪的事情。如果你完全采用原生,你往往会有更好的兼容性(当然,代价是投入更多的工作)。对旧版本 Android 的支持也往往缺乏。

调试

调试 JavaScript 并不是移动平台上最美妙的体验。您最终会在控制台上进行大量日志记录。这是可行的,但肯定不如逐行进入代码那么好。这方面似乎取得了一些进展(参见这个工具叫 weinre https://github.com/apache/incubator-cordova-weinre例如)但我还不能评论它有多好,因为我还没有时间去深入研究它。

这种调试不仅更加困难,而且发现错误也更加困难。 JavaScript 代码中的错误不会最终出现在日志中,除非您手动捕获并记录它们。你最终可能会导致事情默默地失败。

平台API

一般来说,你提到的大玩家都有相当不错的硬件支持。您提到的相机、GPS 和本地存储等功能对于应用程序开发人员来说在重要功能列表中非常靠前,因此他们将它们包括在内。要获得完整的功能列表,您可能需要访问每个功能的网站(这里是PhoneGap 的高级功能支持图表(按平台) https://phonegap.com/about/features例如),但通常您想到的大“电话功能”都在那里。即便如此,据我所知,还有很多更复杂的事情,这些框架没有做或做得不好,特别是那些与手机功能关系不大、与平台相关的事情。线程就是一个例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原生编程对于移动开发有何优势? 的相关文章

随机推荐

  • 如何在 Dart 中向枚举添加方法或值?

    在Java中 当您定义枚举时 您可以执行类似于以下的操作 即向枚举添加成员enum 这在 Dart 中可能吗 enum Foo one 1 two 2 final num value Foo this value 从 Dart 2 6 开始
  • POSIX:FreeBSD 与 Linux 中的管道系统调用

    在 Linux 2 6 35 22 generic 中 man pipe指出 pipeline 创建一个管道 一个可用于进程间通信的单向数据通道 在 FreeBSD 6 3 RELEASE p5 中 man pipe指出 pipeline
  • PostgreSQL 选择结果大小

    我在 PostgreSQL 数据库中有一个表 并从该表中进行一些限制的选择 并且我想知道该选择有多少磁盘空间 我知道有一个postgres函数pg total relation size这给了我数据库中某个表的大小 但是如何找到 子表 的大
  • 将新形状传递给“np.reshape”

    Within numpy ndarray reshape https docs scipy org doc numpy reference generated numpy ndarray reshape html the shape参数是一
  • jquery datetimepicker 24小时时间格式

    我正在使用 datetimepicker js 来选择 jquery 的日期和时间 如何将时间格式从 12 小时制更改为 24 小时制 我得到了答案 您只需要在 24 小时制的格式中提及 HH mm 或在 12 小时制的格式中提及 hh m
  • 数据表到 JSON [重复]

    这个问题在这里已经有答案了 我最近需要将数据表序列化为 JSON 我现在仍然使用 Net 2 0 因此我无法在 Net 3 5 中使用 JSON 序列化器 我想这肯定是以前做过的 所以我上网查了一下found http www codepr
  • sed:更改 .yml 文件中环境属性的值

    我有一个 yml 文件 用于配置应用程序的环境属性 如下所示 env1 prop1 value1 prop2 value2 propn valuen env2 prop1 value1 prop2 value2 prop3 value3 p
  • jquery中的三美元符号是什么?

    我正在尝试调试某人的代码 并遇到了这个 ajax url ajax url param context formDialog success function data this html data BindPopupFormEvents
  • 当 URL 可在浏览器中访问时,SSH Curl 不起作用

    This post is linked with another post of mine still unsolved Laravel 作曲家更新 连接被拒绝 https stackoverflow com questions 52404
  • 为什么 gettext 没有数据库存储选项?

    我正在使用 Django 在基于 Web 的应用程序上进行一些 i18n 操作 该应用程序使用 gettext 作为其 i18n 基础 翻译应该存储在数据库中似乎是一个显而易见的想法 而且并不难做到 但文件系统上的 po 文件仍在使用 为什
  • 让 React 在表单输入字段下显示单独的错误消息

    我正在提交一个返回一系列错误的表单 但我无法弄清楚如何让每个单独的错误出现在正确的输入字段下 现在 所有错误都会打印在每个输入字段下 我在用着react bootstrap 任何帮助 将不胜感激 getValidationState var
  • 在 django 中构建动态表单

    我正在尝试根据存储在数据库中的字段及其定义动态构建一个表单 在我的数据库中 我定义了 1 个带有一些标签的复选框和 1 个带有一些标签的文本字段 如何根据数据库中的数据在我的视图中动态构建表单 Thanks 以下是我在 EuroDjango
  • 如何/在哪里发布 Python 包

    如果一个人创建了一个有用的 Python 包 那么如何 在哪里发布 宣传它以供其他人使用 我已经把它放到了 github 上 但几周后谷歌也没有找到它 包装整洁完整 我制作它供我个人使用 不与其他人分享将是一种耻辱 这是 PyPI 指南 h
  • 如何在cvxpy中编写多个约束?

    我想在 cvxpy 下的优化问题中添加许多约束 在 matlab 中 我可以通过添加一行 subject to 然后使用 for 循环来生成约束 我怎样才能在 cvxpy 中做同样的工作 因为 cvxpy 中没有 服从 概念 有什么建议吗
  • 尝试在 Windows 上执行 package.json 中的脚本会引发 JScript 错误

    所以我正在尝试构建 javascriptair site 在 的里面package json有一个 npm 脚本指向 javascript 命令 package scripts 找到该存储库https github com kentcdod
  • Android 4.3 KeyStore - 尝试检索密钥时链== null

    下列的这个博客 http nelenkov blogspot de 2013 08 credential storage enhancements android 43 html 我使用此代码来创建和存储KeyPair在 Android 密
  • PhpStorm Docker PHPUnit 数据库

    I setup https blog jetbrains com phpstorm 2016 11 docker remote interpreters PhpStorm PHP PHPUnit 与 Docker 我在 PhpStorm 数
  • TarsosDSP 音高分析傻瓜式教程

    我正在开发一个分析声音文件音调的程序 我遇到了一个非常好的 API 称为 TarsosDSP 它提供了各种音高分析 然而 我在设置它时遇到了很多麻烦 有人可以向我展示一些有关如何使用此 API 特别是 PitchProcessor 类 的快
  • WSL 中的默认权限和所有权

    我目前正在从 Ubuntu 18 04 VirtualBox 切换到 WSL 一切都已启动并运行 以拥有完整的 Web 开发环境 不幸的是 文件权限和所有权现在对我来说是一个问题 免责声明 我知道在服务器环境中这会非常糟糕并且不会被完成 这
  • 原生编程对于移动开发有何优势?

    我需要为一家公司在一些主要的移动操作系统上开发应用程序 特别是 iOS Android 和 WP7 我最初计划为三种不同的操作系统编写三个独立的应用程序 每个应用程序都使用本机 SDK 然而 这样做有什么好处吗 有许多可用的跨平台工具 Se