NDK может улучшить производительность приложения. Это обычно верно для многих
приложения, связанные с процессором. Многие мультимедийные приложения и видеоигры используют
нативный код для ресурсоемких задач.
Улучшения производительности могут исходить из трех источников. Во-первых, нативный код компилируется в двоичный код и запускается непосредственно в ОС, а код Java транслируется на Java.
байт-код и интерпретируется Dalvik Virtual Machine (VM) . На Android 2.2 или выше,
компилятор Just-In-Time (JIT) добавлен в Dalvik VM для анализа и оптимизации Java
байт-код во время работы программы (например, JIT может скомпилировать часть
байт-код в двоичный код перед его выполнением). Но во многих случаях нативный код все еще
работает быстрее, чем код Java.
Java-код запускается Dalvik VM на Android. Дальвик В.М. специально разработан
для систем с ограниченными аппаратными ресурсами (пространство памяти, процессор
скорость и т. д.).
Вторым источником улучшения производительности в NDK является то, что нативный код позволяет
разработчикам использовать некоторые функции процессора, недоступные в Android SDK,
например, NEON, технология Multiple Data Multiple Data (SIMD) , позволяющая
элементы данных должны обрабатываться параллельно. Одним конкретным примером задачи кодирования является цвет
преобразование для видеокадра или фотографии. Предположим, мы должны преобразовать фотографию 1920x1280
пикселей от цветового пространства RGB до цветового пространства YCbCr. Наивный подход заключается в применении
формула преобразования для каждого пикселя (то есть более двух миллионов пикселей). С NEON мы можем обрабатывать несколько пикселей одновременно, чтобы сократить время обработки.
Третий аспект заключается в том, что мы можем оптимизировать критический код на уровне сборки, который является
распространенная практика в разработке программного обеспечения для настольных компьютеров.
Неудобство
NDK не может получить доступ ко многим API, доступным в Android SDK напрямую, а разработка в NDK всегда будет представлять дополнительную сложность
в ваше приложение.