自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android編程方法大PK:NDK vs. RenderScript

譯文
移動開發(fā) Android
雖然高效、正確地編程對于確保Android應(yīng)用程序順暢運(yùn)行、迅即響應(yīng)大有幫助,但是有些應(yīng)用程序得益于在Android的Java虛擬機(jī)(名為Dalvik VM)邊界的外面運(yùn)行代碼。這些應(yīng)用程序而是以原生方式運(yùn)行代碼。

[[59727]]【51CTO獨(dú)家譯文】Android平臺為應(yīng)用程序在傳統(tǒng)的Android應(yīng)用邊界外面運(yùn)行提供了兩種方法。***種、也是應(yīng)用最廣泛的方法是使用原生開發(fā)工具包(NDK)。第二種方法是使用RenderScript(RS),這是一種低級的高性能編程語言。這兩種機(jī)制都適用于3D渲染和處理器密集型計(jì)算。

我們在本文中將比較NDK和RS,幫助你決定何時(shí)使用其中一種方法。

NDK vs. RenderScript:編程語言和可移植性

NDK讓開發(fā)人員可以用C或C++編程,并通過Java原生接口(JNI)機(jī)制與Android應(yīng)用程序進(jìn)行聯(lián)系??捎玫膸焓菢?biāo)準(zhǔn)庫,基本上不需要變更,就可以常常移植現(xiàn)有的C/C++代碼。此外,C++與Java區(qū)別不是很大,許多開發(fā)人員同時(shí)精通這兩種語言。

RenderScript則采取了不同的方法,它使用C99語法(標(biāo)準(zhǔn)C來自1999年,***標(biāo)準(zhǔn)是C11,來自2011年),新的應(yīng)用編程接口(API)最終編譯成原生代碼。雖然這種語法廣為人知,但是使用這套系統(tǒng)面臨一個(gè)學(xué)習(xí)過程,因?yàn)槠銩PI并非廣為人知。

最終的可移植性體現(xiàn)在有沒有在種類最廣泛的設(shè)備和平臺上使用的庫。NDK讓你可以利用現(xiàn)有的C/C++庫,你可能已經(jīng)在其他平臺上使用這些庫。RenderScript無法從其他C應(yīng)用程序移植過來,不過它在Android設(shè)備上比NDK更為常見。比如說,RenderScript可在谷歌電視(Google TV)設(shè)備上運(yùn)行,但是目前NDK還缺少對谷歌電視平臺的支持,即使它運(yùn)行Android。

NDK vs. RenderScript:編譯和調(diào)試

[[59728]]用NDK編寫的代碼必須事先針對每一個(gè)目標(biāo)原生平臺來編譯。如果應(yīng)用程序在架構(gòu)未得到支持的平臺上運(yùn)行,應(yīng)用程序的NDK代碼部分就無法正常運(yùn)行。RenderScript在你的開發(fā)機(jī)器上進(jìn)行***遍編譯,然后在目標(biāo)設(shè)備上進(jìn)行***一遍編譯,因而帶來了更高效的原生二進(jìn)制代碼。這意味著,凡是支持RenderScript的設(shè)備都可以運(yùn)行你的代碼,不管采用什么架構(gòu)。

目前,RenderScript帶來的代碼只能在主處理器上運(yùn)行,它會自動生成可以利用多個(gè)核心的代碼——如果目標(biāo)設(shè)備上有多個(gè)核心。不過在將來,有計(jì)劃讓RenderScript代碼在圖形處理器(GPU)上也可以運(yùn)行。這類似CUDA或OpenCL平臺。

采用NDK的應(yīng)用程序可以使用gdb進(jìn)行行級調(diào)試。另一方面,RenderScript應(yīng)用程序在運(yùn)行時(shí)無法調(diào)試??紤]到RenderScript具有的性質(zhì)及其處理多個(gè)核心的方式,這沒什么好大驚小怪的,不過這也加大了查找和消除代碼錯(cuò)誤的難度。

NDK vs. RenderScript:性能

NDK和RenderScript都未能在性能方面提供***方案。兩者都增加了項(xiàng)目的復(fù)雜性,降低了可移植性,提高了測試需求,加大了調(diào)試難度,還給項(xiàng)目增加了維護(hù)負(fù)擔(dān)。如果你的項(xiàng)目不需要進(jìn)行大量計(jì)算,只使用OpenGL的基本圖像功能,或者已經(jīng)在足夠快速地運(yùn)行,那么NDK和RenderScript都不太可能給項(xiàng)目帶來足夠明顯的好處。

如果純粹是用于計(jì)算,RenderScript的設(shè)置和配置很容易,最終的運(yùn)行速度實(shí)際上可能勝過使用NDK的類似實(shí)現(xiàn)方法,需要編寫的代碼比較少。RenderScript最適合處理3D用戶界面或高性能計(jì)算任務(wù)。另一方面,NDK比較適合高性能OpenGL應(yīng)用程序或需要訪問圖形軟件開發(fā)工具包(SDK)更多功能或訪問第三方庫的游戲。

簡單的OpenGL任務(wù)或不受制于處理器的計(jì)算任務(wù)***別去管它。Java編譯器和Dalvik VM的性能總是在不斷提升。就讓你的代碼繼續(xù)使用Java,這讓你編寫的應(yīng)用程序可以充分利用這些性能上的提升,在將來的SDK版本或設(shè)備上可以更好地運(yùn)行。

隨著***一個(gè)編譯步驟得到改進(jìn),為GPU添加更多的硬件支持和計(jì)算支持,RenderScript代碼在將來可能會有所改進(jìn)。另一方面,除了通過硬件改動獲得的性能提升外,通過NDK編寫的本地代碼不太可能出現(xiàn)性能提升。因此,NDK代碼從高效的算法和代碼得到的好處***。

結(jié)束語

***,選擇使用NDK、RenderScript還是繼續(xù)使用Java,完全取決于開發(fā)人員。應(yīng)用程序設(shè)計(jì)方面的這個(gè)決定具有重大影響:它影響著你使用什么編程語言、編寫的應(yīng)用程序可以在什么設(shè)備上運(yùn)行,以及從維護(hù)的角度來看你的軟件項(xiàng)目有多復(fù)雜。

你已經(jīng)了解了NDK和RenderScript的諸多優(yōu)缺點(diǎn)。它們未必可以換著使用,但在許多情況下,可以用這兩種技術(shù)開發(fā)出相似的解決方案。了解NDK和RenderScript的工作機(jī)理,可以幫助你作出更明智的決定,決定在具體開展某個(gè)項(xiàng)目時(shí)使用哪一種方法。不管怎樣,目前有工具可以幫助你讓自己編寫的應(yīng)用程序在盡可能多的設(shè)備上盡可能快速地運(yùn)行。

責(zé)任編輯:佚名 來源: 51CTO.com
相關(guān)推薦

2016-10-10 09:02:42

微軟遠(yuǎn)程桌面RDS

2011-12-14 20:29:13

Android

2012-03-06 14:23:51

蘋果云計(jì)算就業(yè)

2014-09-28 10:29:43

喬布斯施密特Android

2021-01-13 16:04:07

網(wǎng)絡(luò)On-Prem托管

2024-05-21 11:34:03

RustPython編譯器

2013-10-24 10:10:21

Android支持庫

2021-12-23 15:36:21

NASSANDAS

2020-08-25 09:14:17

對象存儲文件存儲塊存儲

2023-05-22 19:49:30

命令Linux

2024-09-12 22:45:47

2019-04-02 15:07:51

API NginxZuul

2025-02-18 16:00:00

代碼Python架構(gòu)

2020-04-15 10:21:43

云計(jì)算AWSAzure

2021-10-29 08:00:00

JSONJava代碼庫

2022-08-04 14:54:50

APTDNFYUM

2023-05-29 19:31:00

PythonBashShell

2015-03-19 11:03:49

Linuxwin10

2017-07-25 14:45:32

GlusterFSCeph存儲

2013-04-09 10:15:13

公有云私有云混合云
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號