第一篇:Android 嵌入式開發(fā)心得體會(huì)
Android 嵌入式開發(fā)心得體會(huì)
剛開始接觸Android感覺到它很有意思,在界面開發(fā)上和web也可以形成了相通的架構(gòu),更加方便,視覺上也是非常的酷,在前期我通過的大量的Android SDK開發(fā)范例大全中的例子以及Android提供的APIDEMOS進(jìn)行學(xué)習(xí),盡管例子之間的連接比較零散,不過通過這些例子的學(xué)習(xí)我可以學(xué)習(xí)到了很多和以前java上相通的思想,因?yàn)锳ndroid在現(xiàn)在也是全新的技術(shù)和框架,在其中我也學(xué)到了如何用單例模式、工廠模式等常用的設(shè)計(jì)模式進(jìn)行學(xué)習(xí),通過API進(jìn)行開發(fā)客戶端,對(duì)Request發(fā)送,Response處理中通過比較方便的JSON對(duì)象傳輸,以及對(duì)XML、JSON、圖片、業(yè)務(wù)等下載處理,對(duì)API接口調(diào)用等問題處理,學(xué)習(xí)Android心得體會(huì)。首先在界面上,我們同樣可以通過不同布局進(jìn)行設(shè)計(jì)非??岬慕缑?,這些界面可以通過include進(jìn)行引入,和jsp、html也有相通的地方,同樣在android上可以用到自定義的樣式這和css也有比較相通的地方,我們可以通過一些公用的方法寫個(gè)BaseActivity這個(gè)基類,通過繼承方式比較不錯(cuò)的實(shí)現(xiàn)了Activity的界面,因?yàn)檫@樣你可以Header(頭部)和Footer(尾部)進(jìn)行處理一些觸發(fā)事件或者特效等,布局模式以相對(duì)模式為主,線線布局模式可以在比較簡單的include進(jìn)行完成,最重要的一點(diǎn)就是:我們可以自己通過重寫方法或者通過實(shí)現(xiàn)View或者Layout等類進(jìn)行擴(kuò)充項(xiàng)目需要的布局(或者控件),在學(xué)習(xí)界面中,我發(fā)現(xiàn)Android為我們提供了很好的類似反射機(jī)制,通過Layout文件夾下的配置文件,可以快速的形成界面,在配置文件可以設(shè)置屬性或者樣式都是很快捷方便。對(duì)比較特殊的界面也可以通過處理嵌入到指定的界面,同樣你可以通過java代碼直接創(chuàng)建View進(jìn)行添加,不過這種方式比較復(fù)雜。對(duì)一些點(diǎn)擊、選中、按鍵等處理的事件,界面之間的跳轉(zhuǎn)Intent管理,通過Bundle對(duì)數(shù)據(jù)在界面之間進(jìn)行傳輸。其次在手機(jī)交互式通信服務(wù)中,學(xué)習(xí)了Android手機(jī)之間進(jìn)行短信發(fā)送、廣播、對(duì)廣播的監(jiān)聽、服務(wù)等,在Service類中沒有context,可以通過Handler來每秒反復(fù)運(yùn)行,自動(dòng)送出系統(tǒng)廣播信息,同時(shí)在這里我們也知道可以設(shè)計(jì)一個(gè)常用的變量類,設(shè)計(jì)一個(gè)當(dāng)前的CurrentActivity這個(gè)變量進(jìn)行控制,進(jìn)行處理。
總而言之,Android設(shè)計(jì)還是比較自由開闊的,只要有想法,自己動(dòng)手便能實(shí)現(xiàn)。
第二篇:【嵌入式】Android開發(fā)NDK C++開發(fā)注意事項(xiàng)
Android開發(fā)NDK C++開發(fā)注意事項(xiàng)
相信Android開發(fā)者都喜歡用C++編寫一些高效的應(yīng)用,有關(guān)Android NDK的C++開發(fā)相關(guān)知識(shí)Android123總結(jié)如下:
1.從Android NDK r5開始支持了STL Port,在這個(gè)版本開始就可以使用部分STL庫的功能了,比如說vector、string擺脫c下面容易出現(xiàn)的數(shù)組未初始化、越界,增強(qiáng)應(yīng)用的健壯性。
2.很多網(wǎng)友包含了include
system 使用默認(rèn)最小的C++運(yùn)行庫,這樣生成的應(yīng)用體積小,內(nèi)存占用小,但部分功能將無法支持
stlport_static 使用STLport作為靜態(tài)庫,這項(xiàng)是Android開發(fā)網(wǎng)極力推薦的stlport_shared STLport作為動(dòng)態(tài)庫,這個(gè)可能產(chǎn)生兼容性和部分低版本的Android固件,目前不推薦使用。
gnustl_static 使用 GNU libstdc++ 作為靜態(tài)庫
默認(rèn)情況下STLPORT是不支持C++異常處理和RTTI,所以不要出現(xiàn)-fexceptions或-frtti,如果真的需要可以使用gnustl_static來支持標(biāo)準(zhǔn)C++的特性,但生成的文件體積會(huì)偏大,運(yùn)行效率會(huì)低一些。
3.支持C++異常處理,在Application.mk中加入 LOCAL_CPPFLAGS +=-fexceptions這句,同理支持RTTI,則加入LOCAL_CPPFLAGS +=-frtti,這里Android123再次提醒大家,第二條說的使用gnustl靜態(tài)庫,而不是stlport
4.強(qiáng)制重新編譯 STLPort,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以強(qiáng)制重新編譯STLPort源碼,由于一些原因可能自己需要修改下STLPort庫,一般普通的開發(fā)者無需使用此項(xiàng)。Android目前最新的NDK版本為r6,相關(guān)的學(xué)習(xí)可以查看NDK中的Samples整體和在PC上開發(fā)沒有太大的不同。
嵌入式相關(guān)資料,歡迎下載!
《嵌入式相關(guān)資料》
第三篇:【嵌入式】android教程JNI開發(fā)疑點(diǎn)總結(jié)
android教程JNI開發(fā)疑點(diǎn)總結(jié)
很多Android新手對(duì)于JNI開發(fā)過程中的疑問不是很清楚,根據(jù)android123@163.com郵箱中反饋的內(nèi)容我們整理如下:
1.JNI中,什么情況才處理jstring、jint、jobject這樣的類型,其實(shí)通過NDK開發(fā)Android C++應(yīng)用,大部分仍然是常規(guī)的cpp和h的標(biāo)準(zhǔn)寫法,只有需要和Java層通訊的方法才包含了類似JNIEXPORT void JNICALL XXX這樣的函數(shù),大多數(shù)的邏輯和標(biāo)準(zhǔn)C/C++沒有什么區(qū)別。
2.我有一個(gè)在Windows上開發(fā)好的dll能否在Android上使用呢? 這里Android開發(fā)網(wǎng)提醒大家,對(duì)于dll這樣的PE文件只能在Windows平臺(tái)下使用,而linux上的動(dòng)態(tài)庫so文件如果是PC上的也無法通過JNI在Android上調(diào)用,由于CPU的指令不同,手機(jī)上必須使用ARM交叉編譯器生成才可以使用,而PC上的為x86或64位,即使是Hello World這樣代碼兼容性很強(qiáng),也必須在NDK中重新編譯才能在Android上使用。
3.學(xué)習(xí)JNI的基礎(chǔ)是什么,或者說什么順序?qū)W習(xí)? 這點(diǎn)Android123推薦大家先了解Java的類型,和內(nèi)部編碼,然后學(xué)習(xí)C/C++語言,對(duì)于NDK r5開始支持的C++語言,這里Android開發(fā)網(wǎng)要和大家說下了,如果需要在JNI中調(diào)用Java的類,你可以學(xué)習(xí)下反射機(jī)制,同時(shí)C++ STL在NDK r5開始支持,這樣開發(fā)應(yīng)用維護(hù)起來更方便些。最后看下NDK的Samples下載Android源碼Framework層基本上就沒有什么大問題了。
4.學(xué)習(xí)NDK最大的困難是什么? 這里Android123認(rèn)為,國內(nèi)網(wǎng)友大多數(shù)都在Windows下做開發(fā)工作,整個(gè)NDK環(huán)境需要Cygwin,同時(shí)mk這樣的makefile編譯腳本的手動(dòng)編寫可能不是很友好,這點(diǎn)Android開發(fā)網(wǎng)已經(jīng)準(zhǔn)備了一整套的Android開發(fā)工具,將在近期公開,幫助大家在PC輔助開發(fā)Android應(yīng)用,同時(shí)常見問題提供了相應(yīng)的鏈接。
5.在Android JNI用處大嗎? 對(duì)于大多數(shù)開發(fā)者來說可能主要用于OpenGL游戲設(shè)計(jì)上,不過對(duì)于純運(yùn)算,算法上C語言比Java有著很多天生的優(yōu)勢,這點(diǎn)不容置疑,多一門技術(shù)多一個(gè)出路嘛,整個(gè)Android源代碼十分龐大,開源的力量最終還是能打敗更封閉的Windows Phone和iOS的。
嵌入式相關(guān)資料,歡迎下載!
《嵌入式相關(guān)資料》
第四篇:android 開發(fā)心得
即 使你的應(yīng)用程序是快速且響應(yīng)靈敏的,但一些設(shè)計(jì)仍然會(huì)給用戶造成問題——與其它應(yīng)用程序或?qū)υ捒蛭词孪扔?jì)劃的交互,意外的數(shù)據(jù)丟失,意料之外的阻塞等等。避免這些問題,有助于理解應(yīng)用程序運(yùn)行的上下文和系統(tǒng)的交互過程,而這些又正影響著你的應(yīng)用程序。簡而言之,你應(yīng)該竭盡全力去開發(fā)一個(gè)與系統(tǒng)和其它應(yīng)用程 序流暢交互的應(yīng)用程序。
一 個(gè)常見的流暢問題是,一個(gè)應(yīng)用程序的后臺(tái)處理——例如,一個(gè) Service或者
BroadcastReceiver——彈出一個(gè)對(duì)話框來響應(yīng)一些事件。這可能看起來沒啥大礙,尤其是你在模擬器上單獨(dú)地構(gòu)建和測試你 的應(yīng)用程序的時(shí)候。然而,當(dāng)你的應(yīng)用程序運(yùn)行在真機(jī)上時(shí),有可能你的應(yīng)用程序在沒有獲得用戶焦點(diǎn)時(shí)后臺(tái)處理顯示了一個(gè)對(duì)話框。因此,可能會(huì)出現(xiàn)在活躍的應(yīng) 用程序后方顯示了你的應(yīng)用程序的對(duì)話框,或者從當(dāng)前應(yīng)用程序奪取焦點(diǎn)顯示了一個(gè)對(duì)話框,而不管當(dāng)前用戶正在做什么(例如,正在打電話)。那種行為,對(duì)應(yīng)用 程序或用戶來說,就不應(yīng)該出現(xiàn)。
為了避免這些問題,你的應(yīng)用程序應(yīng)該使用合適的系統(tǒng)資源來通知用戶——Notification類。使用Notification,你的應(yīng)用程序可以在狀態(tài)欄顯示一個(gè) icon來通知用戶已經(jīng)發(fā)生的事情,而不是奪取焦點(diǎn)和打斷用戶。
另 一個(gè)流暢問題的例子是未能正確實(shí)現(xiàn)Activity的 onPause()和其它生命周期方法而造成意外丟失了狀態(tài)或用戶數(shù)據(jù)。又或者,如果你的應(yīng)用程序想暴露數(shù)據(jù)給其它應(yīng)用程序使用,你應(yīng)該通過 ContentProvider來暴露,而不是(舉例)通過一個(gè)可讀的原始文件或數(shù)據(jù)庫來實(shí)現(xiàn)。
這 些例子的共同點(diǎn)是它們都應(yīng)該與系統(tǒng)和其它應(yīng)用程序協(xié)作好。Android系統(tǒng)設(shè)計(jì)時(shí),就把應(yīng)用程序看作是一堆松散耦合的組件,而不是一堆黑盒代碼。作為開 發(fā)者來說,允許我們把整個(gè)系統(tǒng)看作是更大的組件集合。這有益于我們可以與其它應(yīng)用程序進(jìn)行清晰無縫的集成,因此,作為回報(bào),我們應(yīng)該更好的設(shè)計(jì)我們的代 碼。
下面將討論常見的流暢問題以及如何避免它們:
一 定要記住Android是一個(gè)移動(dòng)平臺(tái)??梢燥@而易見地說,其它Activity(例如,“Incoming Phone Call”應(yīng)用程序)可能會(huì)在任何時(shí)候彈出來遮蓋你的Activity,記住這個(gè)事實(shí)很重要。因?yàn)檫@個(gè)過程將觸發(fā) onSaveInstanceState()和 onPause()方法,并可能導(dǎo)致你的應(yīng)用程序
被殺死。
如 果用戶在你的應(yīng)用程序中正在編輯數(shù)據(jù)時(shí),其它 Activity出現(xiàn)了,這時(shí),你的應(yīng)用程序被殺死時(shí)可能丟失那些數(shù)據(jù)。當(dāng)然了,除非你事先保存了正在進(jìn)行的工作?!癆ndroid方式”是這樣做的:能 接收和編輯用戶輸入的 Android應(yīng)用程序應(yīng)該重寫 onSaveInstanceState()方法,并以恰當(dāng)?shù)姆绞奖4嫠鼈兊臓顟B(tài)。當(dāng)用戶重新訪問應(yīng)用程序時(shí),她能得到她的數(shù)據(jù)。進(jìn)行這種處理方式最經(jīng)典的例子是 mail應(yīng)用程序。如果用戶正在輸入 email,這時(shí)其它 Activity啟動(dòng)了,mail應(yīng)用程序應(yīng)該把正在編輯的email以草稿的方式保存起來。
如果你不想穿著內(nèi)衣在大街上溜達(dá)的話,你的數(shù)據(jù)也不應(yīng)該這樣。盡管可能存在暴露應(yīng)用程序的某種形式給其它應(yīng)用程序,但這通常不是最好的主意。暴露原始數(shù)據(jù),要求其它應(yīng)用程序能夠理解你的數(shù)據(jù)的格式;如果你變更了格式,那么,你將破壞那些沒有進(jìn)行同步更新的應(yīng)用程序。
“Android 方式”是創(chuàng)建一個(gè) ContentProvider,以一種清晰的、深思熟慮的和可維護(hù)的API方式暴露你的數(shù)據(jù)給其它應(yīng)用程序。使用 ContentProvider,就好像是插入Java接口來分離和組裝兩片高耦合的代碼。這意味著你可以修改數(shù)據(jù)的內(nèi)部格式,而不用修改由 ContentProvider暴露的接口,這樣,也不會(huì)影響其它應(yīng)用程序。
如果用戶正在運(yùn)行一個(gè)應(yīng)用程序(例如,Phone程序),斷定對(duì)用戶操作的目的才是安全的。這也就是為什么必須避免創(chuàng)建Activity,而是直接在當(dāng)前的 Activity中響應(yīng)用戶的輸入。那 就是說,不要在 BroadcastReceiver或在后臺(tái)運(yùn)行的 Service中調(diào)用 callActivity()。這么做會(huì)中斷當(dāng)前運(yùn)行的應(yīng)用程序,并導(dǎo)致用戶惱怒。也許更糟糕的是,你的 Activity可能成為“按鍵強(qiáng)盜”,竊取了用戶要提供給前一個(gè) Activity的輸入。視乎你的應(yīng)用程序所做的事情,這可能是個(gè)壞消息。
不 選擇在后臺(tái)直接創(chuàng)建 Activity UI,取而代之的是,應(yīng)該使用NotificationManager來設(shè)置 Notification。它們會(huì)出現(xiàn)在狀態(tài)欄,并且用戶可以在他空閑的時(shí)候點(diǎn)擊它們,來查看你的應(yīng)用程序向他顯示了什么。(注意,如果你的 Activity已經(jīng)在前臺(tái)了,以上將不適用:這時(shí),對(duì)于用戶的輸入,用戶期望的是看到下一個(gè) Activity來響應(yīng))
如果你的應(yīng)用程序需要執(zhí)行一些昂貴或耗時(shí)的計(jì)算的話,你應(yīng)該盡可能地將它挪到線程里。這將阻止向用戶顯示可怕的“Application Not Responding”對(duì)話框,如果不這樣做,最終的結(jié)果會(huì)導(dǎo)致你的應(yīng)用程序完全終止。
一 般情況下,Activity中的所有代碼,包括它的 View,都運(yùn)行在相同的線程里。在這個(gè)線程里,還需要處理UI事件。例如,當(dāng)用戶按下一個(gè)按鍵,一個(gè) key-down事件就會(huì)添加到 Activity的主線程隊(duì)列里。事件處理系統(tǒng)需要很快讓這個(gè)事件出列并得到處理;如果沒有,系統(tǒng)數(shù)秒后會(huì)認(rèn)為應(yīng)用程序已經(jīng)掛起并為用戶提供殺死應(yīng)用程序 的機(jī)會(huì)。
如果有耗時(shí)的代碼,內(nèi)聯(lián)在Activity上運(yùn)行也就是運(yùn)行在事件處理線程里,這在很大程度上阻塞了事件處理。這會(huì)延遲輸入處理,并導(dǎo)致ANR對(duì)話框。為了避免這個(gè),把你的計(jì)算移到線程里。
任 何值得使用的應(yīng)用程序都可能有幾個(gè)不同的屏幕。當(dāng)設(shè)計(jì)UI屏幕時(shí),請(qǐng)一定要使用多個(gè)Activity對(duì)象實(shí)例。依賴于你的開發(fā)背景,你可能理解 Activity類似于 Java Applet,它是你應(yīng)用程序的入口點(diǎn)。然而,那并不精確:Applet子類是一個(gè) Java Applet的單一入口點(diǎn),而一個(gè)Activity應(yīng)該看作是你的應(yīng)用程序多個(gè)潛在入口點(diǎn)之一。你的“main”Activity和其它之間的唯一不同點(diǎn) 是“main”Activity正巧是在AndroidManifest.xml文件中唯一對(duì)“android.intent.action.MAIN”動(dòng)作感興趣的Activity。因此,當(dāng)設(shè)計(jì)你的應(yīng)用程序的時(shí)候,把你的應(yīng)用程序看作是Activity對(duì)象的 集合。從長遠(yuǎn)來看,這會(huì)使得你的代碼更加方便維護(hù)。
當(dāng) 談到 UI觀感時(shí),巧妙地交融非常重要。用戶在使用與自己期望相反的 UI的應(yīng)用程序時(shí),會(huì)產(chǎn)生不愉快的感覺。當(dāng)設(shè)計(jì)你的 UI時(shí),你應(yīng)該盡量避免太多自己的主題。相反的,使用同一個(gè)主題。你可以重寫或擴(kuò)展你需要的主題部分,但至少在與其它應(yīng)用程序相同的 UI基礎(chǔ)上開始。
不 同的 Android設(shè)備可能支持不同的屏幕分辨率。甚至一些可以自己變更分辨率,例如,切換到風(fēng)景模式。確保你的布局和圖片能足夠靈活地在不同的設(shè)備屏幕上正 常顯示。幸運(yùn)的是,這很容易做到。簡而言之,你需要做的是為主要分辨率提供不同版本的作品,然后為不同的尺寸設(shè)計(jì)你的布局。(例如,避免使用硬編碼位置而 使用相對(duì)布局。)如果那樣做的話,系統(tǒng)會(huì)處理剩下的部分,而且你的應(yīng)用程序在任何設(shè)備上都看起來很棒。
Android設(shè)備會(huì)有多種網(wǎng)絡(luò)連接選項(xiàng)。所有的都提供數(shù)據(jù)訪問,但之間肯定有更快的。其中,速度最慢的是GPRS,GSM網(wǎng)絡(luò)的非 3G數(shù)據(jù)服務(wù)。即使具備 3G能力的設(shè)備在非3G的網(wǎng)絡(luò)上也會(huì)花費(fèi)很多的時(shí)間,所以,網(wǎng)絡(luò)很慢仍然是一個(gè)長期存在的事實(shí)。
這 就是為什么你應(yīng)該按照最小化的網(wǎng)絡(luò)訪問和帶寬來編寫你的代碼。你不能假設(shè)網(wǎng)絡(luò)是快速的,所以,你應(yīng)該總是計(jì)劃它是慢的。如果你的用戶碰巧在一個(gè)快速的網(wǎng)絡(luò) 上,那很好——他們的用戶體驗(yàn)會(huì)提升。你要避免相反的情形:在不同的地點(diǎn)和不同時(shí)間,應(yīng)用程序有時(shí)可用,有時(shí)慢得令人抓狂,這樣的程序可能不會(huì)受歡迎。
還 有一個(gè)潛在的地方是,如果你正在使用模擬器,那么你很容易受它迷糊,因?yàn)槟M器使用電腦的網(wǎng)絡(luò)連接。這比手機(jī)網(wǎng)絡(luò)快很多,所以,你需要修改模擬器設(shè)定來模 擬較低的網(wǎng)絡(luò)速度。你可以在 Eclipse中做到這點(diǎn),在啟動(dòng)選項(xiàng)的模擬器設(shè)置頁里設(shè)置或者在啟動(dòng)模擬器時(shí)通過命令行選項(xiàng)設(shè)置。
Android 可以支持多種外觀形狀。也就是說,一些Android設(shè)備擁有全“QWERTY”鍵盤,而其它可能會(huì)有40鍵、12鍵或其它鍵盤設(shè)置。同樣的,一些設(shè)備可 能有觸摸屏,但一些也會(huì)沒有。當(dāng)創(chuàng)建你的應(yīng)用程序的時(shí)候,記住這一點(diǎn)。不要假定特定的鍵盤布局——除非你真的想限定你的應(yīng)用程序只運(yùn)行在某些設(shè)備上。
如 果移動(dòng)設(shè)備經(jīng)常插在墻上,那么,它也就不是很“移動(dòng)”。移動(dòng)設(shè)備是電池供電的,如果我們能讓每次充電的電池使用得更持久一些,那么每個(gè)人都會(huì)更加開心—— 尤其是用戶。
其中兩大耗電硬件是處理器和無線;這也就是我們?yōu)槭裁匆獙懕M可能少做工作、盡可能少去使用網(wǎng)絡(luò)的應(yīng)用程序的重要原因。
如 何讓你的應(yīng)用程序最小化的占用處理器,歸根結(jié)底還是要寫高效代碼。為了減少無線的電量消耗,確保對(duì)錯(cuò)誤條件進(jìn)行正確的處理,并只獲取你要的東西。例如,如 果某一個(gè)網(wǎng)絡(luò)操作失敗了,不要不斷地進(jìn)行重試。如果失敗了一次,有可能是用戶不受歡迎,因此,如果你再以正確的方式操作,有可能還會(huì)失??;所有你做的都是 在浪費(fèi)電池。
用戶是相當(dāng)聰明的:如果你的程序高耗電,他們是一定會(huì)發(fā)現(xiàn)的。到那個(gè)時(shí)點(diǎn),你唯一可以確定的是,你的程序?qū)⒑芸毂恍遁d掉。
第五篇:嵌入式開發(fā)工程師
任職要求:
1、大學(xué)本科及以上學(xué)歷,2年以上工作經(jīng)驗(yàn),計(jì)算機(jī)電子通訊類專業(yè)畢業(yè);
2、能夠熟練使用POWER PCB或PROTEL或ORCAD等電路設(shè)計(jì)軟件進(jìn)行PCB設(shè)計(jì);
3、熟悉電子元器件,能獨(dú)立設(shè)計(jì)數(shù)字及模擬電路,擁有單片機(jī)開發(fā)工作經(jīng)驗(yàn),懂得RF433無線及紅外遙控等相關(guān)知識(shí);
4、熟練使用C語言,有嵌入式開發(fā)工作開發(fā)及智能家居防盜報(bào)警產(chǎn)品經(jīng)驗(yàn)者優(yōu)先。
崗位職責(zé):
1、新產(chǎn)品項(xiàng)目設(shè)計(jì)開發(fā)工作;
2、為相關(guān)部門及項(xiàng)目提供技術(shù)支持;
3、產(chǎn)品售后返修分析,品質(zhì)不斷提升性能改進(jìn);
4、組織對(duì)新研發(fā)產(chǎn)品的制樣、驗(yàn)證、試產(chǎn)、量產(chǎn)等工作的確認(rèn)與審核。