三星bada是乙個新的手機平台,它允許開發者開發豐富的應用程式用來提公升使用者在移動空間中的體驗。本文介紹了三星bada平台open api的基本風格,以及在開發過程中可能會遇到的問題和處理方法。
1、二次構造
在c++中當在物件初始化時分配資源失敗,那麼物件知識部分初始化並且析構函式並沒有被呼叫,這樣會導致資源洩露。保證資源不被洩露可以在進行二次構造,即將一些可能分配資源失敗的放在乙個construct()函式裡面。(注:這個應該是借鑑的symbian。)
2、處理方法
與標準c++相比bada的處理方法工作起來很不相同。為了最好的封裝任何事情都是由方法進行處理。
在bada中資料損壞或者由於資料損壞導致的裝置故障時不可能的,因為直接訪問資料時不可能的。
限制資料的訪問是為了阻止惡意軟體利用一些安全漏洞例如緩衝區溢位。
3、異常處理
bada的錯誤和異常處理與標準c++也是不同的。bada利用錯誤的結果代替c++的異常處理,因為c++的異常處理會占用很多的執行時間和空間。
所有的異常處理在bada中有乙個返回值result型別捕捉,result型別就是unsigned long。e_success結果表示方法返回成功,其餘的所有的返回結果都是失敗的。
a、異常的偵測:
a、函式返回乙個result:
例如:result r = e_success;
...r = list.construct(...);
if (r != e_success) // identical to 'if (isfailed(r))'
b、函式給result賦值或者返回null:
例如:pobj = list.getat(...);
if (getlastresult() != e_success) // or 'if (pobj == null)'
c、if失敗跳到catch:
r = pobj2->construct(..);
trycatch(r == e_success, , "[%s] service could not be initialized.",
geterrormessage(r));
...catch:
delete pobj1;
delete pobj2;
return;
b、異常處理:
a、用goto catch處理:
result r = e_success;
...r = plist->construct(...);
trycatch(r == e_success, delete plist, "[%s] propagated.", geterrormessage(r));
...catch:
setlastresult(r);
return null;
b、嘗試放回e_success:
r = list.construct(...);
tryreturn(r == e_success, r, "[%s] propagated.", geterrormessage(r);
c、返回乙個null:
r = list.construct(...);
tryreturn(r == e_success, null, "[%s] propagated.", geterrormessage(r);
d、轉化乙個錯誤的環境到另乙個錯誤的環境:
r = list.indexof(...);
tryreturn(r == e_success, e_invalid_arg, "'%s' converted to [e_invalid_arg].",
geterrormessage(r));
4、記憶體處理:
在bada中記憶體通過所有權方針管理。所有權有責任刪除動態申請的記憶體並且避免記憶體洩漏。
獨有所有權意味著所有權不能夠被分享。得到所有權有兩條規定。
1> 新的操作符得到分配空間的所有權。
2> 所有權能夠被轉移,但是不能被分享。
圖1
5、應用程式除錯:
為了幫助你除錯,bada提供了很多巨集指令:
1> assert 巨集指令:
assert 巨集指令是用來測試條件是否成立,如果條件不成立就殺掉程序它們沒有被編譯到發布版中。
這個是用來檢查程式是否有邏輯錯誤的,如果返回錯誤,那麼當前程序就被殺掉。
例如:result
myclass::dosomething(void)
這個是用來檢查程式是否有邏輯錯誤,如果返回錯誤,那麼當前程序被殺死,一條資訊顯示在控制台上。
例如:result
myclass::dosomething(void)
在控制台可能顯示的資訊:
log巨集指令:
例如:bool
try巨集指令:
try巨集指令是模擬標準c++的try-catch。和assert不同的事try不殺死程序。
trycatch(condition,cleanup,message)
trycatch檢測條件,如果失敗,列印一條資訊,評價一條cleanup表示式,然後gotocatch:
例如:const a*
myclass::dosomething(const mchar* pvalue)
tryreturn(condition,value,message)
如果條件錯誤,message輸出,value被返回。
tryreturnvoid(conditiong, message)
如果條件錯誤,列印一條資訊。
apt 註解開發 2 定義操作api
public inte ce viewfinder public inte ce viewbinder 這裡只做乙個activity的findview public class activityviewfinder implements viewfinder public class lzfview...
驅動開發學習 2
利用 driverstudio 的 driverwizard 生成了驅動,研究了一天.整個研究了個雲裡霧裡.摸不著一點頭緒.發現走入了誤區,又要學習ddk 又要搞清楚driverstudio的框架.所以難度太大.決定扔掉driverstudio從ddk入手.做了乙個世上最簡單的驅動程式。pragma...
學習ARM開發 2
學習arm開發 2 今天是星期天,剛好在家裡休息。又是學習arm的大好時機了。早上起得很早,因為都想著怎麼樣搞好這個arm開發環境,總是心急的。搞得睡覺,也睡不好。立即把電腦開啟,為了更加快點,把家裡兩台電腦都開啟,用一台比較快的電腦裝linux。目前因為兩台電腦都已經安裝windows系統,又裝了...