BREW開發教程 3 BREW程式設計概念

2021-08-26 22:06:07 字數 3329 閱讀 5180

乙個模組可以從brew資源檔案中讀取資料,從而使用應用程式可以獲取字串、影象、對話方塊資源。通過在資源檔案存入與語言或裝置相關的資訊,使用得編寫適應不同國家或裝置的應用成為可能。資源檔案可以通過brew的資源編輯器來生成二進位制資源檔案和相應的資源標頭檔案。

開發brew應用,可以被編輯成可以模擬器和目標裝置上執行,用於編輯brew應用所需的一些標頭檔案和源**隨brew sdk提供,一些用於生成dll 特定功能的檔案也包含中開發包中,允許開發人員生成應用程式和資源檔案,在模組器和目標裝置使用的資源檔案及其二進位制檔案格式是相同的。

下面列出了生成乙個應用所需的部件:

在裝置或是模擬器啟動時,應用程式管理器讀取每個mif檔案,以取得包含中該mif檔案中應用程式列表,應用程式管理在螢幕顯示該列表(應用程式圖示及標題)。

注意:brew class id只對於授權的開發者開放,如果沒有得到授權時,可以使用一些臨時class id,直到你取得相應的授權為止。

sample/bar.mif

介面class id通過brew模組支援的imodule_createinstance函式來建立乙個類例項,然而在可以使用該函式前,模組必需被載入和初始化,brew平台採用乙個按需載入的機制,當模組被載入到系統中,brew通過imodule來建立所需的類例項,直到模組的引用值(reference count)為0時,該模組才從系統中載出,此時brew將釋放該模組的所佔記憶體。

通常情況下,brew呼叫ishell_createinstance只會呼叫addref和release,而不會呼叫其它函式,如果乙個類被成功建立,將返回乙個指向該介面的指標,當呼叫者不再使用該類時,必需呼叫該類的release函式。

特點要注意的所用包含在模組中的物件在建立時要增加該模組的引用值,而在釋放該類時,要減小對模組的引用值,從而允許brew按需要載入載出該模組。

下面提供的brew開發指南可以幫助開發人員避免一些常見的錯誤以及減少用於測試及高度的時間。包括了:

通過閱讀下面的指南可以幫助你減少從window到arm環境的移植時間,並最大可能使你的應用在目標裝置上成功執行。

開發指南說明

進行null指標檢測

有兩種情況,如下:

避免堆疊溢位

不要在堆疊中使用大陣列,不要在函式中定義大的陣列或變數作為區域性變數,這是因為在brew環境下提供給堆疊使用的記憶體是有限的,如果需要使用充足的記憶體(比如超過256位元組),使用動態記憶體分配機制來分配記憶體(malloc或使用iheap 介面)。

如果是在乙個遞迴過程中分配空間,動態分配記憶體。

不要在迴圈中占用過多時間

如果在迴圈中占用過多cpu時間可能引用裝置復位,所以不要在乙個事件處理中占用過多時間,這會阻止其它事件的傳送而最終引起裝置復位。

當接收到某個事件時,應用只需做必需的事件處理後立限返回,從而可以保證其它事件的傳送。

開發裝置無關的應用

為保證所開發的應用可以在不同的裝置上執行,而不需關心裝置的記憶體大小、鍵盤、螢幕大小、顏色深度,使用ishell_getdeviceinfo()來取得關於裝置的資訊,使用這些資訊作為鍵盤、螢幕大小、顏色深度的引數,而不要在**中寫死。

使用convertbmp例程在不同裝置上處理影象。

使用資源檔案

使用資源檔案來存放與語言相關的字串、對話方塊及影象資料。這允許將應用從一種語言切換到另一種語言。而不要直接寫入**中。

釋放記憶體

由於裝置上所能使用的記憶體是有限的,必需釋放不再使用的記憶體空間,有兩種情形:

高通推薦立限釋放不再使用的記憶體。

不要使用全域性及靜態變數

不要在定義乙個結構時對其初始化

從arm編譯器角度來看,定義並初始化乙個結構將被視為靜態變數。

不要在條件語句中對變數賦值

避免arm編譯器錯誤

不要使用本地浮點呼叫

原因同「不要使用全域性變數」,這將引起型別轉換,使用brew提供的浮點操作函式。

使用brew提供的標準函式庫

以保證編譯後的**最小,使用brew提供的標準c函式子集而不要直接呼叫c函式。

避免型別轉換錯誤

因為arm編輯器比其它的編輯處理隱含型別轉換時更為嚴格,請明確指明型別轉換,從而可以避免從window到arm環境下的編譯錯誤。

檢測函式返回值

當呼叫brew api時,如果有返回值,處理成功和失敗兩種情況。

處理錯誤碼

因為某些api返回void,如果適合的話,呼叫brew 提供的getlasterror()來區別錯誤**。

使用小寫的檔案及資料庫名稱

因為高通提供的efl中檔名是區別大小寫的,使用小寫的檔案及資料名稱。

由於已知的原因,不要在檔名中使用兩個.,不要在資料名中使用. 。

盡可能減小**

為盡可能減小**,在將應用載入到目標裝置前關閉除錯資訊選項。

設定編譯告警等級

在window平台上編譯時,將告警等級設為最高端,4級,這將幫助你更進一步檢測**。這是因為arm編譯器比window編譯器更為嚴格。

組合多個讀寫操作

為從整體提高應用程式效能,盡可能組合多個讀寫操作。將資料讀入到記憶體中並根據需要來訪問。

當你熟悉了brew開發環境,並看過了示例程式之後,就可以編寫新的brew應用了。最簡單和最快的方式是使用brew應用開發嚮導,該嚮導將幫助建立開發brew應用所需的各個部件。

brew開發環境使用一組用於brew執行的系統資源,這些系統資源是和裝置支援的語言相關的並可以在資源檔案aeecontrols.bar中取得,該系統資源定義所有brew介面所需要的資源。

在裝置環境中,所有語言相關的資源放置在該語言特定的目錄中,目錄名稱可以從iso639 中引出來的。

brew平台不支援浮點操作,如果在brew sdk中開發並測試帶浮點操作的應用時是可以通過的,這是因為底層的平台是window作業系統,然後裝置brew平台是不支援浮點操作也就不能使用浮點操作,如果必需使用則必需呼叫brew提供的浮點操作實用函式。

ibase介面定義所有aee類的基本結構, 所有aee類都是從ibase介面派生出來的。

因為所有的aee物件都是可以動態生成的,所有必需採用某種機制來分配及釋放物件,ibase介面提供了兩個基本函式:addref 和 release,允許:

所有的brew類都必需實現ibase介面函式。

imodule介面

brew模型乙個基本機制是通過ishell來鏈結或載入模組,這些模組向外提供了乙個入口點用於取得imodule介面,imodule介面提供了兩個函式。第乙個和最關鍵的乙個是允許brew從imodule查詢指定的介面。第二個則是允許brew釋放模組不再使用的資源。

動態模組只提供了主調函式,這是通過將它放在可模組重分配**段第乙個物件的第乙個函式來實現的。brew可以根據需要來調入這些模組。

BREW開發教程 3 BREW程式設計概念

乙個模組可以從brew資源檔案中讀取資料,從而使用應用程式可以獲取字串 影象 對話方塊資源。通過在資源檔案存入與語言或裝置相關的資訊,使用得編寫適應不同國家或裝置的應用成為可能。資源檔案可以通過brew的資源編輯器來生成二進位制資源檔案和相應的資源標頭檔案。開發brew應用,可以被編輯成可以模擬器和...

BREW開發教程 3 BREW程式設計概念

乙個模組可以從brew資源檔案中讀取資料,從而使用應用程式可以獲取字串 影象 對話方塊資源。通過在資源檔案存入與語言或裝置相關的資訊,使用得編寫適應不同國家或裝置的應用成為可能。資源檔案可以通過brew的資源編輯器來生成二進位制資源檔案和相應的資源標頭檔案。開發brew應用,可以被編輯成可以模擬器和...

BREW開發教程 4 BREW訊息處理機制

uint32 dwparam 第三和第四分別為16位和32位與事件相關的資料,這些值是與具體的事件相關的。鍵盤事件描述 evt key press evt key release evt key 在對話方塊中通過方向鍵來移動游標的方向取決於哪種控制項具有焦點以及使用者按了哪個方向 上 下 左 右 鍵...