我对Android aps中本机代码的生命周期感到困惑。我看到过引用,说本机代码是在Dalvik VM中执行的,但这是真的吗?我的印象是VM只运行Dalvik字节码。另一方面,本机代码使用JNI,它可以从VM内部的Java调用。最后,使用NativeActivity会有什么不同吗?
我以为我对NDK的了解相当不错,直到我坐下来试图向自己解释。我甚至不确定我是否以明智的方式提问。
答案 0 :(得分:8)
我见过引用说本机代码是在Dalvik VM中执行的,但是这是真的吗?
它在包含Dalvik VM的进程内执行。就个人而言,我不会将其描述为在VM内部执行 - 正如您所说,Dalvik字节码在VM内部执行。 “在Dalvik VM的控制下”将是更好的措辞,恕我直言。当然,我认为它归结为你对“in”的定义。
最后,使用NativeActivity会有什么不同吗?
就NativeActivity
is implemented in Java而言,并非如此。虽然你可能没有任何Java,但Java仍然在轻松参与运行本机代码的行为。