Android 普通方法调用和本机方法调用之间有什么区别?

Android 普通方法调用和本机方法调用之间有什么区别?,android,android-ndk,Android,Android Ndk,现在在另一个类中,我正在创建对象并调用两个方法,这两个方法都将执行相同的操作。这两个调用在性能方面或其他方面有什么区别 //my class class NDKSupport { // Loding library static { System.loadLibrary("NDKTest"); } // Stuff in NDKSupport public native String getMessageFromNDK(NDKSuppo

现在在另一个类中,我正在创建对象并调用两个方法,这两个方法都将执行相同的操作。这两个调用在性能方面或其他方面有什么区别

//my class
class NDKSupport {

    // Loding library
    static {
        System.loadLibrary("NDKTest");
    }

    // Stuff in NDKSupport
    public native String getMessageFromNDK(NDKSupport support);

    public String getMessage() {

        // doing some stuff over here
        return "SOME RESULT";
    }
}

//Native code


 JNIEXPORT jstring JNICALL
 Java_com_afbb_ndkcheck_NDKSupport_getMessageFromNDK(
 JNIEnv* env, jobject thiz, jobject ndkSupport) {

 jclass ndkSupportClz = env->GetObjectClass(ndkSupport);

 jmethodID getInstallationSource =
 env->GetMethodID(ndkSupportClz,"getMessage", "()Ljava/lang/String;");

 return (jstring)env->CallObjectMethod(mainActivity, getInstallationSource);
 }
给我一些关于这方面的信息,或者如果有任何可用的教程。
请原谅我的英语…

NDK允许您使用C/C++编写代码,然后将其链接到Java应用程序中。您可以潜在地提高应用程序的速度

NDK的缺点是,它只编译到特定的CPU(而留在Java land意味着它可以在任何目标版本的Android上工作)

本机C代码将使用底层操作系统(linux)API(系统调用),因此比必须通过JVM解释java代码时快得多。大多数游戏使用本机C代码库进行2D/3d图形、输入、声音等

所以没有区别,但是你可以提高你的代码性能,如果你想为某些特定的cpu编码,你可以使用本机方法,但是如果你想制作一个与所有类型的cpu兼容的应用,你可以使用简单的java方法。 您可以根据您的应用要求使用任何方法。 你可以学习一些视频教程。这是很好的解释和很好的教程。 这里有很多教程-
本机方法是特定于平台的代码。它们通常用C语言或C++语言编写,并包含在库(DLL)中。可以创建一个混合Java应用程序,从这些库中获益

使用本机方法的原因

  • 访问设备或Android的特殊功能 操作系统
  • 加速
  • 获得对大量现有遗留代码的访问
  • 通常,NDK的良好用例是CPU密集型应用程序,如游戏引擎、信号处理和物理模拟

    本机方法的主要缺点是没有跨平台的能力

    现在,如果您不知道本机代码是什么,那么可能不需要使用本机代码。Android NDK文档很好地解释了这一点:

    …您应该明白,NDK不会使大多数应用程序受益。作为 作为开发人员,您需要平衡其优点和缺点。 值得注意的是,在Android上使用本机代码通常不会导致 显著的性能改进,但它总是增加你的应用程序 复杂性。通常,只有在必要时才应使用NDK 永远不要因为你喜欢用C/C++编程而使用你的应用程序。什么时候 检查是否应该使用本机代码进行开发,请思考 了解您的需求,并查看Android框架API是否提供 您需要的功能


    @谢谢你的回复。u提到“本机方法的主要缺点是您不具备跨平台能力。”。这里的跨平台是什么。你能详细解释一下吗?谢谢你清楚的解释。正如你提到的,“对于某些特定的cpu,你可以使用本机方法”。“特定cpu”是指。。?你能再解释一下吗?有各种类型的CPU系列。目前只支持以下系列-•ANDROID\u CPU\u系列\u ARM•ANDROID\u CPU\u系列\u X86•ANDROID\u CPU\u系列\u MIPS等。您可以查阅和识别相关文档。
    NDKSupport support = new NDKSupport();
    
    // what is the difference between these two calls
    
    String d = support.getMessage();
    String d2 = support.getMessageFromNDK(support);