gpt4 book ai didi

Android NativeActivity

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:31 26 4
gpt4 key购买 nike

Android NDK刚刚得到显着扩展,包括支持完全使用 native C/C++ 代码编写 Android 应用程序。现在可以使用 native 代码捕获键盘和触摸屏上的输入事件,还可以使用新的 NativeActivity 类在 C/C++ 中实现应用程序生命周期。

鉴于所有扩展的原生功能,是否值得完全绕过 Java 并使用原生代码编写 Android 应用程序?

最佳答案

NDK 本身并不是原生的。它在很大程度上是 Android SDK 的 JNI 包装器。使用 NativeActivity 为您提供了一种处理某些应用程序生命周期事件的便捷方式,并在顶部添加您自己的 native 代码。 ALooper、AInputQueue 等都是 Java SDK 对应物的 JNI 包装器,其中一些带有额外的代码,这些代码是私有(private)的,真实应用程序无法访问。

当谈到 Android 开发时,没有完全用原生 C++ 编写应用程序这样的事情 - 您将(在我能想到的每个实际应用程序案例中)总是需要使用 Android API:s,它们是很大程度上是纯 Java。无论您是通过 NDK 提供的包装器还是您自己创建的包装器来使用这些,都不会真正改变这一点。

因此,回答您的问题:不,这是不值得的,因为您最终会为 SDK 调用编写 JNI 包装器,而不是将 JNI 包装器编写到您自己的 Java 方法中,这些方法用更少的代码做同样的事情,更简单的代码和更快的代码。例如,使用“纯 C++”显示一个对话框,涉及相当多的 JNI 调用。只需通过 JNI 调用执行相同操作的 Java 方法,您的代码就会更快(一次 JNI 调用),而且可以说,代码更易于维护。

要完全了解您可以做什么,您确实必须检查 Android 源代码。从 NDK 中提供的 native_app_glue.c 开始,然后继续 AActivity、ALooper、AInputQueue 等的操作系统实现。谷歌代码搜索在这方面有很大帮助。 :-)

如果在 Java 中很容易做到,并且包含许多调用,那么通过 JNI 调用一个方法来完成这一切,而不是编写所有额外的代码来通过多个 JNI 调用来完成它。在合理的情况下尽可能多地保留现有的 C++ 代码。

关于Android NativeActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4372899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com