android - 什么在 Android 上表现更好?使用 Java 或 C++ 编写的应用程序

标签 android c++ performance qt qt5

在 Qt 上使用 C++ 编写的面向 Android 设备的应用是否比使用 Android SDK 使用 Java 编写的应用性能更好?

最佳答案

看来其他的答案都是C++和Java的争论,所以我会尝试分享我在Android中Java和Qt编程的经验和知识。

首先,Android SDK 是用 Java 实现的,因此开发者应该默认使用 Java。

.

更多性能和更多控制

但在某些情况下需要更高的性能。游戏就是一个例子。图像处理是另一个用例示例。
在某些情况下,您需要使用 C++ 来更好地控制硬件。 (例如使用更高频率的加速度计)

Android 使用名为 Dalvik 的特定虚拟机(直到版本 5)。任何需要 UI 的应用程序都需要 Dalvik。所以 C++ 应用程序(例如游戏和 Qt)需要涉及 Dalvik。

此外,也没有直接从 C++ 中利用服务和操作系统功能的 C++ 库(例如通讯录)。因此,您需要将 Java 与 C++ 一起使用。为此,您需要在 .java 文件中编写一些 Java 代码,并且需要使用 JNI 来与 C++ 和 Java 通信。 JNI 是您需要学习的另一个有问题的东西。
因此,使用 C++ 开发 Android 应用程序比使用常规 Java 应用程序要困难得多。
.

我在 Android 上的 Qt 体验

我在没有 QtQuick 控件的情况下使用 Qt\QtQuick 编写了一些 Android 应用程序。 QtQuick 非常适合 UI 开发,但您需要做一些事情,例如手动管理加载和卸载 UI。这不是问题,因为 QtQuick 中有一些功能可用于此目的,例如 Loader
在桌面中实现应用程序的一般部分(非特定于 Android 部分)非常高效、快速且有趣(C++ 和 QtQuick)。
但是在 JNI 中实现 Android 特定部分需要更多的时间和精力。

.

Android 上的 Qt - 缺点和优点

  • APK 包很大(大多数情况下开销约为 8mb)
  • 需要发布多个 APK 包(ARM、x86)(Google play 可以让您在没有最终用户通知的情况下做得很好)
  • 应用启动时间比普通应用长
  • 需要通过JNI结合C++和Java进行开发
  • 调试难度更大
  • 更少的文档
  • 极其快速的用户界面
  • 如果您打算在 iOS 等其他平台上发布您的应用,您只需重新实现特定于操作系统的部分。因此,您的时间/成本将会降低。
  • 高性能后端处理和整体应用性能
  • 更好的内存管理
  • 在 Android 2.2(例如)到 7.0 中质量相同! (Android SDK 的一些功能只是在高版本,因此如果你打算支持低版本的 Android,你不能使用这些功能。比如 AnimationFramework。使用 Qt 你没有这个问题)
  • 在早期和更高版本的 Android 版本中使用 HW 加速 UI
  • 防止反混淆的源代码保护
  • View 和 Model/Controller 的良好分离(有助于专业编码)
  • 简单快速的 UI 开发
  • 简单而漂亮的 UI 效果(OpenGLES 和 GLSL)(也自然地集成到 UI 的其他组件)

.

建议

如果(您不是 Qt 经验丰富的开发人员)=> 使用 Java

IF(您只需要更多性能来进行某些处理)=> Java + C++(NDK)

如果(您是一位经验丰富的 Qt 开发人员)并且((您是 Java 初学者)或者(您计划将您的应用程序移植到其他平台))=> 将 Qt 与 C++ 结合使用

关于android - 什么在 Android 上表现更好?使用 Java 或 C++ 编写的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24719650/

相关文章:

java - 如何在Android上加载XML进行自定义解析?

c++ - QTabWidget 样式 - 缺少我的 'g...s' 的底部

c++ - gdb 观察点未检测到变量的变化

mysql - 如何从 mySQL 中的 group-by 选择的行中选择一个字段

android - 无法在 Google 日历中插入多个事件

android - 创建显示为拼图的 Android 通知

android - 单击外部小部件时保留选择

c++ - 内存比较(有差异位置)

regex - 如何使我的sparql查询与正则表达式更快?

java - 我可以为这个循环提供更快的性能吗?