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

Din*_*l24 4 c++ performance qt android qt5

针对在Qt上使用C++编写的Android设备的应用程序是否会比使用Android SDK使用Java编写的应用程序执行得更好?

S.M*_*avi 15

似乎所有其他答案都是关于C++和Java的争议,所以我将尝试分享我在Android中关于Java和Qt编程的经验和知识.

首先,用Java 实现Android SDK,因此开发人员应该使用Java作为默认值.

.

更多性能和更多控制

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

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

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

我在Android上的Qt体验

我在没有QtQuick Controls的情况下编写了Qt\QtQuick的一些Android应用程序.QtQuick对于UI开发来说非常棒,但您需要做一些事情,例如手动管理加载和卸载UI.这不是问题,因为QtQuick中有一些功能用于此目的Loader.
在Desktop中实现应用程序的一般部分(非特定于Android部分)非常高效,快速且有趣(包括C++和QtQuick).
但是在JNI中实现Android特定部分需要更多时间和关注.

.

Qt on Android - 缺点和优点

  • APK包很大(~8mb大多数情况下开销)
  • 需要发布多个APK包(ARM,x86)(谷歌播放让你在没有最终用户注意的情况下做得非常好)
  • 应用启动时间高于普通应用
  • 需要通过JNI使用C++和Java的组合进行开发
  • 调试更加困难
  • 更少的文档
  • 非常快的用户界面
  • 如果您计划在iOS等其他平台上发布您的应用程序,则只需重新实现特定于操作系统的部分.因此,您的时间/成本将会降低.
  • 高性能后端处理和整体应用程序性能
  • 更好的内存管理
  • Android 2.2中的相同质量(例如)直到7.0!(Android SDK的某些功能只是更高版本,因此如果您计划支持较低版本的Android,则无法使用该功能.例如AnimationFramework.使用Qt您没有此问题)
  • 在早期Android版本以及更高版本中使用硬件加速UI
  • 防止非模糊处理的源代码保护
  • 关于视图和模型/控制器的良好分离(有助于专业编码)
  • 简单快速的UI开发
  • 简单而漂亮的UI效果(OpenGLES和GLSL)(也自然地集成到UI的其他组件)

.

建议

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

IF(对于某些处理,您只需要一些性能)=> Java + C++(NDK)

IF(你是Qt经验丰富的开发人员)和((你是Java的初学者)或者(你打算将你的应用移植到其他平台))=>使用Qt和C++


Gab*_*han 5

让我们将其分为两部分:

1)C++的性能会比Java更好吗?

是的。当然会。只要您不对 Java 进行多次 JNI 调用,情况总是如此。这就是为什么人们(包括 Google)使用性能至关重要的 C++。

2)QT 的性能会比使用 JNI 返回 Java 或使用 NDK 中 C++ 可用的原始调用更好吗?

假设您以最佳方式编写这两种代码,则顺序可能是原始 NDK 调用 > Java 调用 > QT 调用。QT 库将进行与您完全相同的函数调用,只是在其上放置了不同的抽象层。该层会增加开销。大多数时候开销很可能是最小的。如果您是一位经验丰富的 QT 程序员,您可能会使用 QT 更快地编码。如果您是一位经验丰富的 Android 程序员,那么没有它您会更快地完成工作。QT 会增加出现错误的几率,因为 QT 层本身的任何错误都会在您的代码中显现出来。

  • @KevinGalligan 抱歉,我所见过的唯一显示 Java 更快的基准已经被揭穿了数十次。C++ 总是更快。并不总是快几倍,但总是更快。维基百科链接几乎不能证明任何事情。在科学期刊或其垃圾中进行同行评审。 (9认同)