安卓開發(fā)心得5篇最新實(shí)例
android開發(fā)是指android平臺(tái)上應(yīng)用的制作,Android早期由“Android之父”之稱的Andy Rubin創(chuàng)辦。下面給大家?guī)硪恍╆P(guān)于安卓開發(fā)心得,希望對(duì)大家有所幫助。
安卓開發(fā)心得1
時(shí)間飛快,轉(zhuǎn)眼畢設(shè)實(shí)訓(xùn)已經(jīng)結(jié)束,我們也完成了所選的項(xiàng)目任務(wù)。從實(shí)訓(xùn)開始到現(xiàn)在,經(jīng)歷了三個(gè)多月的時(shí)間,在這段時(shí)間里,我們著手安卓應(yīng)用程序開發(fā),剛開始接觸Android感覺到它很有意思,在界面開發(fā)上和web也可以形成了相通的架構(gòu),更加方便,視覺上也是非常的酷,在前期我通過的大量的Android SDK開發(fā)范例大全中的例子以及Android提供的APIDEMOS進(jìn)行學(xué)習(xí),盡管例子之間的連接比較零散,不過通過這些例子的學(xué)習(xí)我可以學(xué)習(xí)到了很多和以前java上相通的思想。我在為期半個(gè)月的實(shí)習(xí)中學(xué)到了很多在課堂上根本就學(xué)不到的知識(shí),收益非淺.現(xiàn)在我對(duì)這半個(gè)月的實(shí)習(xí)做一個(gè)工作小結(jié)。
1通過半個(gè)月的android實(shí)習(xí),基本掌握了Android應(yīng)用程序開發(fā)的一般流程。對(duì)常用控件基本掌握其用法,對(duì)其事件的監(jiān)聽方法也基本掌握。學(xué)習(xí)Android不僅是對(duì)前沿開發(fā)技術(shù)的了解,也是對(duì)編程知識(shí)的一次提升。
2通過學(xué)習(xí)Android的控件、布局、Activity、Service等一系列基礎(chǔ)知識(shí),對(duì)整個(gè)Android的開發(fā)有了大致的了解。例如: 要的布局(或者控件) ,在學(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)行傳輸。
4在手機(jī)交互式通信服務(wù)中,學(xué)習(xí)了Android手機(jī)之間進(jìn)行短信發(fā)送、廣播、對(duì)廣播的監(jiān)聽、服務(wù)等,在Service類中沒有conte_t,可以通過Handler來每秒反復(fù)運(yùn)行,自動(dòng)送出系統(tǒng)廣播信息,同時(shí)在這里我們也知道可以設(shè)計(jì)一個(gè)常用的變量類,設(shè)計(jì)一個(gè)當(dāng)前的CurrentActivity這個(gè)變量進(jìn)行控制,進(jìn)行處理?! ≡贏ndroid編程過程中鞏固熟悉了Java的編程。由于Android應(yīng)用程序的開發(fā)離不開Java的支持,所以基礎(chǔ)的Java知識(shí)是必須的。Android系統(tǒng)是基于Linu_的手機(jī)操作系統(tǒng)平臺(tái),要深入系統(tǒng)的學(xué)習(xí)Android,不僅僅是有Java和Android應(yīng)用開發(fā),必須要具備Linu_,C/C++高級(jí)編程才能深入的涉及Android Framework和Android內(nèi)核開發(fā)。成為Android開發(fā)的高素質(zhì)人才。所以,在后續(xù)對(duì)Android的學(xué)習(xí)中可能會(huì)看一些較底層的書籍。
由于這次實(shí)習(xí)時(shí)間較短,對(duì)于Android應(yīng)用程序的高級(jí)編程講的很少,是這次實(shí)習(xí)中的不足。要想開發(fā)一些好的應(yīng)用程序,還需要更多的知識(shí)支持。在做實(shí)習(xí)最后的項(xiàng)目時(shí),遇到了很多平時(shí)沒有遇到或者沒有特別關(guān)注的問題,如常見的Activity忘記注冊(cè),對(duì)SD卡存取需要權(quán)限,在寫SQL語句時(shí)細(xì)微的錯(cuò)誤就可能導(dǎo)致程序運(yùn)行錯(cuò)誤。這些問題只有自己在實(shí)際開發(fā)中才能體會(huì)到并且解決,并且在解決后可以長(zhǎng)時(shí)間的記住?! ⊥ㄟ^Android的實(shí)習(xí),我們?cè)诖笏?a href='http://regraff.com/biyeji/' target='_blank'>畢業(yè)前,我們又掌握了一項(xiàng)新的前沿的開發(fā)技能,也有了更多的發(fā)展方向,這在以后的找工作的過程中無疑為我們?cè)黾恿隧来a,也可以成為我們的一項(xiàng)興趣愛好,可以根據(jù)我們自己的需要設(shè)計(jì)一些小的程序??傊?,在這次實(shí)習(xí)中,我獲得了很多東西,提高了自己的編程技巧和編程方法,并且認(rèn)識(shí)了Android應(yīng)用程序的開發(fā),以及加深了對(duì)Java的認(rèn)識(shí)。
最后,通過實(shí)習(xí),我收獲了很多東西,特別是編程方面的,這對(duì)即將畢業(yè)的我們來說,這次實(shí)習(xí)是一次較為珍貴的充電!
安卓開發(fā)心得2
知不覺中為期三周的實(shí)訓(xùn)已經(jīng)接近尾聲。雖然時(shí)間很短,不過我確實(shí)學(xué)到了一些我覺得有用的東西,并且是平時(shí)上課學(xué)不到的東西。三周的實(shí)訓(xùn),時(shí)間很短,確實(shí)很短。原本剛開始,乃至之前聽說有為期三周的實(shí)訓(xùn)的時(shí)候,都覺得,這樣的實(shí)訓(xùn)不過就是走過場(chǎng)罷了,只有三周的時(shí)間,能學(xué)到什么東西呢?所以一開始也沒當(dāng)回事。
就這樣,帶著這樣的心態(tài),開始了實(shí)訓(xùn)。安卓實(shí)訓(xùn)。因?yàn)榈谝惶熘芤簧衔鐩]有課,下午,才算是正式開始了三周的實(shí)訓(xùn)。一開始聽老師講課的時(shí)候,感覺很舒服啊,噼里啪啦一講一堆,不過我就喜歡這樣的,聽著爽啊。平時(shí)老師上課的時(shí)候都是講一句頓一頓,或者一句話反復(fù)琢磨半天,這樣的話,雖然老師的出發(fā)點(diǎn)是好的,是為了讓學(xué)生更容易理解,但這樣的話,教學(xué)的整體進(jìn)度就下來了。而且就算是一個(gè)知識(shí)點(diǎn)反復(fù)講,也不見得能就精通了這個(gè)東西,或者說對(duì)這個(gè)有多么理解。反而容易讓學(xué)生產(chǎn)生一種懈怠的情緒。
一、第一件事:說話做事要有真憑實(shí)據(jù)
而這樣一開始,老師就給我一種耳目一新的感覺:這老師上課帶勁啊!不過也就僅此而已了。老師花了一下午的時(shí)間著重介紹了老師所在的公司,以及我們接下來三周的實(shí)訓(xùn)計(jì)劃。接下來一周實(shí)訓(xùn)之后,這個(gè)實(shí)訓(xùn)在老師的刻意營造下,盡量模仿公司的氛圍。而讓我感受最受的就是:憑事實(shí)說話。就是無論要下什么結(jié)論的時(shí)候,都要拿得出能夠說服人的數(shù)據(jù)。
這是我在第一周中感受最深的一件事。也是我學(xué)到的第一件事。說話下結(jié)論要有真憑實(shí)據(jù)。
二、第二件事:專業(yè)技術(shù)的不斷學(xué)習(xí)
在這一周中,老師著重講了如何進(jìn)行系統(tǒng)構(gòu)架。因?yàn)橹耙哺蠋熥鲞^項(xiàng)目,所以對(duì)進(jìn)行系統(tǒng)構(gòu)架的理解要稍微深入些,對(duì)其重要性的了解也要多一些。這樣,在老師的講解下,再和我以前的理解相互驗(yàn)證,感覺就像武功高手,在前輩的點(diǎn)撥下頓悟了一樣。
這就是我學(xué)到的第二件事,是在專業(yè)技能方面的收獲。
三、第三件事:學(xué)會(huì)尋找動(dòng)力
然后在接下來的一周中,這樣的學(xué)習(xí)中老師讓我們每組一個(gè)白板,然后把每天的任務(wù)完成情況著實(shí)記錄。這樣,不同的組之間要對(duì)比;同組,不同的組員之間對(duì)比;自己今天和昨天的對(duì)比。無形中產(chǎn)生了一種強(qiáng)大的推理,推動(dòng)我們前進(jìn)。
這是我學(xué)習(xí)到的第三件事:沒有動(dòng)力,就學(xué)會(huì)尋找動(dòng)力,而比較,是最有效的激勵(lì)。
四、第四件事:學(xué)會(huì)尊重別人,那樣你也會(huì)獲得別人的尊重
在第二周結(jié)束的時(shí)候,我們用來結(jié)束實(shí)訓(xùn)的一個(gè)項(xiàng)目就正式開始了。這個(gè)項(xiàng)目的時(shí)間很短,三天,如果算上上周末的時(shí)間的話,那就是五天,但前一周的時(shí)間確實(shí)沒有有效的利用起來。那么這樣只好算三天了。在這次項(xiàng)目中,我沒有一個(gè)人大包大攬,一個(gè)人把項(xiàng)目扛下來。因?yàn)橹案蠋熥鲞^項(xiàng)目,并且我也是小組負(fù)責(zé)人,雖然作為這個(gè)小組負(fù)責(zé)人,我做的很不好,但有這樣的一次經(jīng)歷之后,我知道我哪里做的不好,哪里有問題,雖然不會(huì)很全面,但至少有一些努力的方向了。
而這次,我就嘗試著,去真正的發(fā)揮一個(gè)團(tuán)隊(duì)的作用,而不只是一個(gè)人完成項(xiàng)目??梢哉f,這次項(xiàng)目我的目標(biāo)是:以團(tuán)隊(duì)的形式去推動(dòng)項(xiàng)目的進(jìn)展。
我不一個(gè)人做的原因有這么幾點(diǎn):首先,一個(gè)人做太沒有挑戰(zhàn)性了,為了完成任務(wù)而做項(xiàng)目,沒意思。第二點(diǎn):團(tuán)隊(duì)的成員對(duì)參與這個(gè)項(xiàng)目比較積極。不管怎么說,我的團(tuán)隊(duì)小組成員就算基礎(chǔ)很差,但只要是真心的想要學(xué)習(xí)的,想要把項(xiàng)目做好的,那我就不應(yīng)該拒絕他們,因?yàn)橐粋€(gè)小小的拒絕,可能會(huì)對(duì)別人的一生產(chǎn)生巨大的影響,而這個(gè)影響似乎不是積極的。所以,我覺得我應(yīng)該盡我所能去幫助我的小組成員。第三點(diǎn):我想鍛煉一下,作為一個(gè)小組負(fù)責(zé)人,我的職責(zé)是什么。我應(yīng)該怎么做才能充分發(fā)揮小組成員的能力。我甚至自己都沒有參與核心代碼的編寫。我既然決定要幫助我的小組成員,那么我就是真心實(shí)意的幫助我的小組成員,而不是敷衍,也不想讓我的小組成員覺得我是在敷衍他們,那么我就把真正重要的東西交給我的小組成員,這樣讓我的小組成員感覺到自己受到重視,這樣也可以更好的激勵(lì)我的小組成員。
雖然,或許這樣短短的幾天不能夠改變一個(gè)人太多。但或許我可以給他們?cè)谛睦锓N下一顆積極的種子,或許以后,只要一點(diǎn)點(diǎn)陽光,一點(diǎn)點(diǎn)水分,這顆種子就可以發(fā)芽,破土而出,成長(zhǎng)為一個(gè)堅(jiān)定的信念。
這是我學(xué)到的第四件事:真心地為他人著想,尊重他人。這樣才能夠使一個(gè)團(tuán)隊(duì)產(chǎn)生真正的凝聚力。
安卓開發(fā)心得3
剛開始接觸Android感覺到它很有意思,在界面開發(fā)上和web也可以形成了相通的架構(gòu),更加方便,視覺上也是非常的酷,在前期我通過的大量的Android SDK開發(fā)范例大全中的例子以及Android提供的APIDEMOS進(jìn)行學(xué)習(xí),盡管例子之間的連接比較零散,不過通過這些例子的學(xué)習(xí)我可以學(xué)習(xí)到了很多和以前java上相通的思想。
我在為期半個(gè)月的實(shí)習(xí)中學(xué)到了很多在課堂上根本就學(xué)不到的知識(shí),收益非淺.現(xiàn)在我對(duì)這半個(gè)月的實(shí)習(xí)做一個(gè)工作小結(jié)。
通過半個(gè)月的android實(shí)習(xí),基本掌握了Android應(yīng)用程序開發(fā)的一般流程。對(duì)常用控件基本掌握其用法,對(duì)其事件的監(jiān)聽方法也基本掌握。學(xué)習(xí)Android不僅是對(duì)前沿開發(fā)技術(shù)的了解,也是對(duì)編程知識(shí)的一次提升。通過學(xué)習(xí)Android的控件、布局、Activity、Service等一系列基礎(chǔ)知識(shí),對(duì)整個(gè)Android的開發(fā)有了大致的了解。例如:要的布局(或者控件),在學(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類中沒有conte_t,可以通過Handler來每秒反復(fù)運(yùn)行,自動(dòng)送出系統(tǒng)廣播信息,同時(shí)在這里我們也知道可以設(shè)計(jì)一個(gè)常用的變量類,設(shè)計(jì)一個(gè)當(dāng)前的CurrentActivity這個(gè)變量進(jìn)行控制,進(jìn)行處理。
在Android編程過程中鞏固熟悉了Java的.編程。由于Android應(yīng)用程序的開發(fā)離不開Java的支持,所以基礎(chǔ)的Java知識(shí)是必須的。Android系統(tǒng)是基于Linu_的手機(jī)操作系統(tǒng)平臺(tái),要深入系統(tǒng)的學(xué)習(xí)Android,不僅僅是有Java和Android應(yīng)用開發(fā),必須要具備Linu_,C/C++高級(jí)編程才能深入的涉及Android Framework和Android內(nèi)核開發(fā)。成為Android開發(fā)的高素質(zhì)人才。所以,在后續(xù)對(duì)Android的學(xué)習(xí)中可能會(huì)看一些較底層的書籍。
由于這次實(shí)習(xí)時(shí)間較短,對(duì)于Android應(yīng)用程序的高級(jí)編程講的很少,是這次實(shí)習(xí)中的不足。要想開發(fā)一些好的應(yīng)用程序,還需要更多的知識(shí)支持。在做實(shí)習(xí)最后的項(xiàng)目時(shí),遇到了很多平時(shí)沒有遇到或者沒有特別關(guān)注的問題,如常見的Activity忘記注冊(cè),對(duì)SD卡存取需要權(quán)限,在寫SQL語句時(shí)細(xì)微的錯(cuò)誤就可能導(dǎo)致程序運(yùn)行
錯(cuò)誤。這些問題只有自己在實(shí)際開發(fā)中才能體會(huì)到并且解決,并且在解決后可以長(zhǎng)時(shí)間的記住。
通過Android的實(shí)習(xí),我們?cè)诖笏漠厴I(yè)前,我們又掌握了一項(xiàng)新的前沿的開發(fā)技能,也有了更多的發(fā)展方向,這在以后的找工作的過程中無疑為我們?cè)黾恿隧来a,也可以成為我們的一項(xiàng)興趣愛好,可以根據(jù)我們自己的需要設(shè)計(jì)一些小的程序??傊谶@次實(shí)習(xí)中,我獲得了很多東西,提高了自己的編程技巧和編程方法,并且認(rèn)識(shí)了Android應(yīng)用程序的開發(fā),以及加深了對(duì)Java的認(rèn)識(shí)。
安卓開發(fā)心得4
從2016年4月到6月主要做的工作是網(wǎng)站的開發(fā),而6月到現(xiàn)在2016年8月初,主要做的工作是Android和IOS兩種App的開發(fā),又以Android為主。
將這段時(shí)間的Android開發(fā)心得記錄如下。
1.開發(fā)環(huán)境和參考資料
由于學(xué)會(huì)__的時(shí)間比較短(2016年7月才學(xué)會(huì)),現(xiàn)在在用的mac版AndroidStudio是在國內(nèi)某站上下載的。今年將開發(fā)環(huán)境由windows轉(zhuǎn)為mac了,好在各種IDE都是跨平臺(tái)的,遷過來后麻煩不多,Android Studio也貼心地支持Eclipse風(fēng)格快捷鍵,使用技巧方面,《Android群英傳》的第2章「Android開發(fā)工具新接觸」講了些很好的技巧。
同樣因?yàn)閷W(xué)會(huì)__比較晚,主力參考資料一直是手頭的幾本書籍:可以當(dāng)詞典用的《瘋狂Android講義》,手把手地帶新手入門的《第一行代碼》,優(yōu)雅細(xì)致地講Android體系結(jié)構(gòu)的《Android開發(fā)精要》,這三本是2015年買的,很喜歡讀,另外《Android群英傳》《Android UI設(shè)計(jì)》《打造高質(zhì)量Android應(yīng)用》《App研發(fā)錄》《Android開發(fā)藝術(shù)探索》買來后翻開的次數(shù)較少,感覺對(duì)不起它們。這幾本其實(shí)也都是好書,以后要多看。
學(xué)會(huì)__之后,Android官網(wǎng)也成了好選擇,但不代表書本就沒用了。官方資料的優(yōu)勢(shì)是正統(tǒng)和條理清晰,但在「最佳實(shí)踐」甚至「黑科技」上還是一線程序員寫的書更接地氣。而當(dāng)想深入理解底層原理、類庫的作用時(shí),官網(wǎng)是好選擇,而不像書本上的知識(shí)會(huì)讓你有「說得對(duì)嗎」「沒翻譯錯(cuò)吧」「沒過時(shí)吧」的擔(dān)憂。官網(wǎng)和書本,應(yīng)當(dāng)優(yōu)勢(shì)互補(bǔ)。具體編程中遇到的各種問題,書本上當(dāng)然不能窮盡,官網(wǎng)就更不可能了,這時(shí)候Google和StackOverflow就有了巨大作用,當(dāng)然,這也不能解決一切問題,很多時(shí)候還是要耐心地慢慢調(diào)試。
2.頁面知識(shí)
這方面《Android開發(fā)精要》講得非常好:安卓的四大組件,被以「任務(wù)」的方式組織在一起,「應(yīng)用邊界」和「進(jìn)程邊界」都被打破了。個(gè)人感覺,這是學(xué)習(xí)Android編程時(shí)極為重要、應(yīng)該最早學(xué)習(xí)到的基礎(chǔ)知識(shí)。
四大組件中,Activity最重要,它名為「活動(dòng)」,視為「頁面」更容易理解。頁面間的關(guān)系,以「?!沟姆绞浇M織,顯示一個(gè)新頁面即將新頁面入棧,總顯示棧頂?shù)捻撁妫c(diǎn)擊手機(jī)上的返回鍵,則彈出棧頂頁面,這些跟瀏覽器的「前進(jìn)/后退」按鈕的邏輯是一致的,有些時(shí)候需要更復(fù)雜的控制,例如A打開B,B打開C,希望關(guān)閉C時(shí)直接返回到A,則應(yīng)在顯示C時(shí)將B關(guān)掉,棧內(nèi)元素由ABC變成AC,即可實(shí)現(xiàn)目的。
國人用App,習(xí)慣了底部標(biāo)簽欄,但官方只有頂部標(biāo)簽欄,所以只好自己實(shí)現(xiàn),Activity中放一個(gè)Fragment和一組顯示為標(biāo)簽欄的頁面元素(具體使用的是RadioGroup,也可以使用別的元素,這不重要),實(shí)現(xiàn)當(dāng)點(diǎn)擊標(biāo)簽按鈕時(shí),菜單、標(biāo)簽欄、Fragment的樣式和邏輯都符合要求即可。Fragment的生命周期和能力,跟Activity幾乎一模一樣,問題只在于當(dāng)和另外Activity交互時(shí),接到信息的往往是TabActivity(即Fragment所在的Activity),需要把消息從TabActivity轉(zhuǎn)交給Fragment。菜單的控制也是,點(diǎn)擊菜單的消息會(huì)到TabActivity手里,要由它轉(zhuǎn)交給具體的Fragment。
Activity和Fragment(下簡(jiǎn)稱頁面)中的元素關(guān)系,與html的dom類似,是樹狀的層次,事件也是先由子元素接收,再冒泡到父元素。布局方面,LinearLayout(線性布局)和RelativeLayout(相對(duì)布局)最常見,線性布局可以思路清晰地將元素?cái)[在一條直線上,線性布局嵌套,即可先行后列地?cái)[放,類似bootstrap中的row和column,可以嵌套許多層,而RelativeLayout適合用來擺以元素之間的相對(duì)位置為核心的頁面,在思路上比LinearLayout要復(fù)雜一點(diǎn),但功能強(qiáng)大,布局層次扁平,頁面效率高。這兩者的關(guān)系有點(diǎn)像html中的布局:各種block和inline元素的使用是常規(guī)武器,大部分時(shí)間好用且省心,但個(gè)別時(shí)候則需要脫離文檔流。
頁面中具體的單個(gè)元素,則與html的dom中的元素也非常類似,有寬度、高度、margin、padding、背景色、文本色、字號(hào)等「樣式」屬性,因此正如html中可以把樣式寫在html里,也可以寫在css里一樣,Android頁面的樣式也可以拿出來放到style配置文件里,這樣能減少重復(fù),便于維護(hù)。輸入元素中用戶輸入的內(nèi)容,當(dāng)然也能從該元素的屬性中讀出。響應(yīng)事件的元素的響應(yīng)函數(shù)注冊(cè),也是在該元素上直接聲明即可,類似網(wǎng)頁中的__.onClick方式。元素和所屬頁面之間的關(guān)系,在頁面的onCreate方法中使用findView找到該元素,并設(shè)到該頁面的成員變量上。頁面持有它的元素,元素?fù)碛袑傩浴⑤斎胫?,并綁定有響?yīng)函數(shù),這在任何有界面的編程中都是一致的。
3.數(shù)據(jù)知識(shí)
作為c/s程序,在本地當(dāng)然有保存數(shù)據(jù)的能力,包括了鍵值對(duì)保存和數(shù)據(jù)庫保存,這能力連html5后的b/s程序都具有了(5之前只有cookie的方式),Android這些能力的代碼都很簡(jiǎn)單,不多說。
與服務(wù)器的交流,rest的交流方式是事實(shí)標(biāo)準(zhǔn),這種交流方式保證了服務(wù)端寫好rest接口后,開發(fā)的Android、IOS甚至Angular這種OPOA的網(wǎng)頁程序都能共用這一套接口。rest的編碼規(guī)范,網(wǎng)上早已有很多了,不多說。Android的HttpClient程序,只要指定url、參數(shù)、Get或Post等請(qǐng)求類型,即可發(fā)送請(qǐng)求,當(dāng)服務(wù)器給出Http響應(yīng)之后,Android程序可以從中拿到返回的json字符串,用JSON等庫解析為集合或?qū)嶓w(其實(shí)json本質(zhì)無非是map和list兩種集合的混搭),然后遍歷和取值,自動(dòng)或手動(dòng)構(gòu)造成實(shí)體對(duì)象,然后改變頁面的顯示。在要頁面顯示時(shí),由于Http返回的處理函數(shù)運(yùn)行于另一個(gè)線程,直接調(diào)用頁面的成員變量以試圖修改其顯示內(nèi)容會(huì)報(bào)錯(cuò)。為此需要提早注冊(cè)一個(gè)Handler,用于在接收到消息時(shí)讀取頁面的「數(shù)據(jù)屬性」并改變頁面顯示,Http返回處理函數(shù)將數(shù)據(jù)更新到頁面的「數(shù)據(jù)屬性」中,向Handler發(fā)送一個(gè)消息,讓Handler讀取「數(shù)據(jù)屬性」并更新頁面即可。
在頁面顯示數(shù)據(jù)時(shí),最常用到是ListView,可以定義一個(gè)Adapter,實(shí)現(xiàn)根據(jù)下標(biāo)返回Item頁面元素的方法,方法是聲明一個(gè)Item布局文件,Adapter持有數(shù)據(jù)集合,在要實(shí)現(xiàn)的方法中使用傳入的下標(biāo)獲得單個(gè)實(shí)體,再使用Item布局文件實(shí)例化一個(gè)頁面元素對(duì)象,用實(shí)體的屬性渲染頁面元素對(duì)象,將頁面元素對(duì)象返回即可,推薦使用ViewHolder來提高性能,這在包括《打造高質(zhì)量Android應(yīng)用》等書都講了。
4.實(shí)踐經(jīng)驗(yàn)
有了上面1至3的知識(shí),理論上即可完成App的開發(fā),善于將各種編程技能元素組合使用即可(界面知識(shí) + 數(shù)據(jù)知識(shí) = 一切),但還有些具體工作了才會(huì)獲得的經(jīng)驗(yàn)。
在Android Studio中引入第三方庫是使用Gradle,類似maven,寫配置文件即可。
App上架方面360、百度、騰訊、豌豆莢、小米都成功上線了,華為和PP助手不允許非公司用戶上線,沒辦法。
嘗試手動(dòng)實(shí)現(xiàn)定時(shí)輪詢來獲得服務(wù)器上的提醒,不成功,但對(duì)Service和BroadcastReceiver的理解更深了,Service的主要用途就是保證它打開的線程一直活著,但怎么保證這Service不死?一是設(shè)成常駐在通知欄的前臺(tái)Service,二是在安卓手機(jī)「設(shè)置」里將該App設(shè)為「鎖屏后繼續(xù)運(yùn)行」,還要將網(wǎng)絡(luò)設(shè)為「鎖屏后不斷網(wǎng)」,以保證鎖屏后線程能繼續(xù)輪詢并從網(wǎng)絡(luò)上得到最新信息。而BroadcastReceiver的主要作用是,讓兩個(gè)相互之間解耦合得很好的組件可以互相通訊,只需要發(fā)起通訊那方指定一個(gè)字符串——既不需要訪問對(duì)象,也不需要指定class類對(duì)象,指定一個(gè)字符串即可,這時(shí)通訊發(fā)起方根本不知道會(huì)不會(huì)有人響應(yīng)它、會(huì)有幾個(gè)人響應(yīng)它,零個(gè)、一個(gè)、多個(gè)響應(yīng)者都有可能,這就是「廣播」的意義,可以聯(lián)系「消息隊(duì)列」來理解它,主要的目的是解耦。
雖然如此還是常有用戶反饋收不到消息推送,只好使用專業(yè)的推送服務(wù),目前使用的是「友盟」,文檔很好,還提供了編程式發(fā)消息的sdk,測(cè)試也很友好,調(diào)了兩天,用戶基本能順利收到推送了,當(dāng)然還是要在手機(jī)設(shè)置中將App加入「鎖屏后繼續(xù)運(yùn)行」的白名單,否則友盟的PushService被殺掉就收不到推送了。另外第三方的「統(tǒng)計(jì)」還在摸索。
程序更新提示的實(shí)現(xiàn)是在啟動(dòng)時(shí)向服務(wù)器發(fā)一個(gè)請(qǐng)求了解最新版本號(hào),與本地程序版本號(hào)比對(duì)后,如果有更新的,則詢問是否要更新。apk包是在Android Studio里簽名打包之后,用360加固了之后(否則各平臺(tái)不允上線),傳到了「七牛云存儲(chǔ)」的服務(wù)器上,在App獲取最新版本號(hào)時(shí),將最新的apk包的地址一并獲取下來,如果用戶同意更新,則在后臺(tái)啟動(dòng)線程下載該apk包,下載完成后自動(dòng)安裝。
App的登錄,是將用戶名密碼提交到服務(wù)器,服務(wù)器檢查正確后返回一個(gè)token,App將這token保存在本地,以后請(qǐng)求api時(shí)附帶用戶名和token一起發(fā)給服務(wù)器,服務(wù)器檢查用戶名和token正確,則將關(guān)鍵的數(shù)據(jù)返回給App,否則視具體需求返回不完整的數(shù)據(jù)(未注冊(cè)用戶看到的數(shù)據(jù)不完整),或者直接返回錯(cuò)誤(未注冊(cè)用戶完全不允許訪問的數(shù)據(jù))。注冊(cè)時(shí),則是生成一個(gè)驗(yàn)證碼,將手機(jī)號(hào)和驗(yàn)證碼存到庫里,調(diào)用發(fā)短信的服務(wù)商的接口發(fā)到用戶手機(jī),當(dāng)用戶輸入驗(yàn)證碼發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器檢查手機(jī)號(hào)和驗(yàn)證碼是否匹配,如果匹配,則注冊(cè)成功。
Android頁面中嵌入Html頁面很簡(jiǎn)單,但這兩者產(chǎn)生交互的功能還沒做過,如果以后做到,再補(bǔ)充進(jìn)來,這里留個(gè)TODO的「抽象方法」占位置。還有圖像的延遲加載、數(shù)據(jù)庫的使用,都要留個(gè)「TODO」。有時(shí)間即實(shí)踐之。
5.個(gè)人感想
「應(yīng)用程序員」做久了,總是覺得沒太多成就感,雖然功能有人用會(huì)很開心。但當(dāng)陷入沒什么技術(shù)含量的細(xì)枝末節(jié),覺得「知道這些東西僅代表有經(jīng)驗(yàn),沒什么了不起」,就覺得很虛無。安卓的知識(shí),對(duì)我來說最有趣的還是體系結(jié)構(gòu)、界面的邏輯、數(shù)據(jù)的邏輯這三者,當(dāng)陷入具體的事務(wù),某個(gè)api該怎樣調(diào),函數(shù)有幾個(gè)該怎樣寫,甚至最無聊的安卓各版本差異,就算做成功了,也覺得沒什么好滿足的。
而關(guān)于代碼質(zhì)量,在寫了這么多年Java的服務(wù)器代碼,用過市面上幾乎所有流行框架,做過無數(shù)次封裝之后,寫這種App的代碼,真提不起重構(gòu)的興頭,「重構(gòu)的第一原則就是不要重構(gòu)」,這種思辯,恐怕沒幾個(gè)人辯得過我,因?yàn)槲覍?duì)在設(shè)計(jì)模式、重構(gòu)、軟件工程這些方面的閱讀和思考量都非常大,而且邏輯清晰,文采飛揚(yáng),曾經(jīng)而且如今也正在因一些文字被有大名氣大影響力的人物欣賞,這些事情久了,就覺得無聊,很多時(shí)候人的火氣不是來源于別人不認(rèn)同自己,而是來源于自己不認(rèn)同自己,當(dāng)你對(duì)自己有了認(rèn)同,就會(huì)覺得別人的發(fā)言很無聊,連反駁的興頭都沒有,有那工夫,不如真真切切地讀兩本書,寫兩行代碼。自身修為的提升,總要依賴于這些腳踏實(shí)地的努力,而非來源于口舌上的斗爭(zhēng)。最重要的是,要知道自己想要的是什么。
安卓開發(fā)心得5
Android 開發(fā)感想
18年從.net轉(zhuǎn)行做安卓開發(fā),現(xiàn)在已經(jīng)過去一年多了。說一下感想和心得體會(huì)!
一、開始
說一下我的經(jīng)厲,從畢業(yè)開始出來工作一直是從事.net方向的開發(fā)工作。一開始也是沒什么經(jīng)驗(yàn),加上也沒有其他手藝就找了一個(gè).net的開發(fā)崗位,剛開始兩年都是做一些基本的系統(tǒng)開發(fā)OA、CRM什么的。后來跳槽換了幾家公司,也都差不多主要是.net web系統(tǒng)開發(fā)或者是后臺(tái)接口的開發(fā)。跟著團(tuán)隊(duì)一起做項(xiàng)目,完成需求開發(fā),解決bug等等。做了幾年看到現(xiàn)在移動(dòng)互聯(lián)網(wǎng)是趨勢(shì)就打算換個(gè)方向,本來在我工作的第二年是有一次機(jī)會(huì)的但是錯(cuò)過了,當(dāng)時(shí)買了mac準(zhǔn)備轉(zhuǎn)ios開發(fā)的但是剛出來工作基礎(chǔ)不好加上沒有自制能力所以就沒有成功轉(zhuǎn)型。
后來就還是在做.net相關(guān)的工作,結(jié)果發(fā)現(xiàn)做.net的越來越少,加上51上面發(fā)現(xiàn)工作崗位遠(yuǎn)遠(yuǎn)沒有java和Android的多就想著換個(gè)方向了,另一個(gè)原因是做.net技術(shù)一般工資也沒提高多少。然后就準(zhǔn)備學(xué)習(xí)Android了
二、Android學(xué)習(xí)
Android學(xué)習(xí)是自學(xué)的花了兩三個(gè)月的時(shí)間吧,買了幾本書,《Android第一行代碼》《Android開發(fā)藝術(shù)》再加上Google的文檔和菜鳥教程。剛開始是從一個(gè)創(chuàng)意開始,比如想做一個(gè)app。下載開發(fā)環(huán)境,配置開發(fā)工具,然后寫一個(gè)helloworld開始!那時(shí)候就是在家自學(xué),做幾個(gè)例子。跟著網(wǎng)上的教程寫一下,因?yàn)橹白鲩_發(fā)也有一段時(shí)間了,java基礎(chǔ)還行基本掌握,就從Android開發(fā)的ui開始學(xué)習(xí),一開始是了解基本的一些ui和_ml怎么寫,然后學(xué)習(xí)如何交互,基本上是把第一行代碼里面的例子都敲了一遍。然后就是做一個(gè)項(xiàng)目實(shí)戰(zhàn)一下,比如一個(gè)天氣應(yīng)用,剛開始學(xué)習(xí)的時(shí)候也是什么都不會(huì),經(jīng)常百度,看別人寫的代碼復(fù)制然后改一下,后來發(fā)現(xiàn)不行。還是要思考一下原理,然后在家做了一兩個(gè)app之后覺得差不多了解一點(diǎn)了。
1使用listview 和ReceryView的問題二自定義listview中的東西。
三、找工作
學(xué)完Android基礎(chǔ)加上做了幾個(gè)例子程序之后有了一點(diǎn)點(diǎn)信心,就開始寫簡(jiǎn)歷了,寫的是一年工作經(jīng)驗(yàn)。然后投簡(jiǎn)歷,找工作的時(shí)候已經(jīng)是6月份了,給我打電話的公司也不多就每天投一下簡(jiǎn)歷,然后看看面試題,想想怎么面試。再就是修改簡(jiǎn)歷。大概找了一個(gè)星期左右吧,面試成功了一家公司,是一家外包公司,之前沒進(jìn)過外包加上剛開始也什么經(jīng)驗(yàn)就去了工資待遇還可以。面試的時(shí)候問了一些簡(jiǎn)單的view基本原理,常用的控件和多線程知識(shí),以及java基礎(chǔ)等等。我大概答上來了,自我感覺70分吧。然后把之前公司的一些項(xiàng)目寫上去了。之前公司也有移動(dòng)端的項(xiàng)目,我大概了解一些,只不過當(dāng)時(shí)是負(fù)責(zé)寫后臺(tái)接口的。就這樣就找到了第一份Android的開發(fā)工作。當(dāng)然也有一些不好的地方,比如編造了一些經(jīng)驗(yàn)。但是不這樣的話根本連面試的機(jī)會(huì)都沒有。
四、工作體驗(yàn)
工作也快一年多了吧,剛開始進(jìn)入公司是負(fù)責(zé)公司的一個(gè)內(nèi)部系統(tǒng)的Android端的開發(fā)工作,根據(jù)每一期的需求進(jìn)行開發(fā)。一般一個(gè)月到一個(gè)半月左右發(fā)布一個(gè)版本,更新迭代也是很快的,然后一開始是寫一些簡(jiǎn)單的ui界面,調(diào)用一下接口。第一個(gè)月就是熟悉一下項(xiàng)目,剛好公司有同時(shí)和我交接,期間有不懂的也會(huì)問問其他同事,經(jīng)常是問一下ios端的開發(fā)。然后因?yàn)橐恍┦虑轫?xiàng)目組的一個(gè)同事離職了,我才發(fā)現(xiàn)原來招我進(jìn)來是替代他的,然后Android端的話就只有我一個(gè)人了,感覺壓力有點(diǎn)大。不過那位同事走之前把項(xiàng)目基本和我介紹了,然后里面系統(tǒng)框架也已經(jīng)搭建好了,平時(shí)的主要工作就是改改界面,根據(jù)需求做一下系統(tǒng)的開發(fā),和之前界面的修改。只是因?yàn)榛A(chǔ)不好,加上經(jīng)驗(yàn)也不是很足。常常加班,不過進(jìn)步也是有的。這一年多來基本保證了項(xiàng)目的正常開發(fā)上線,雖然有時(shí)候會(huì)拖延幾天。也緊急修改過一下bug。但是對(duì)我也是一種鍛煉吧。工作總體來說還好,和同事們相處也比較愉快。同時(shí)也感謝他們對(duì)我的幫助,從別人身上也學(xué)到了不少東西,有時(shí)候有問題也是一起交流討論。
工作中的一個(gè)技術(shù)問題和知識(shí)點(diǎn),自定義View,視頻播放,圖片加載緩存,獲取視頻縮略圖,復(fù)雜界面的布局,以及一些特殊效果的實(shí)現(xiàn)。這些問題下一篇文章會(huì)詳細(xì)寫出來。
五、總結(jié)和感慨
總結(jié)
通過這一年左右的工作經(jīng)歷讓我對(duì)移動(dòng)端開發(fā)有了一個(gè)新的認(rèn)識(shí),Android入門簡(jiǎn)單但是要想深入學(xué)習(xí)也需要花一番功夫。同時(shí)在這一年的開發(fā)工作中,業(yè)余還是沒有主動(dòng)學(xué)習(xí)和提高。對(duì)于項(xiàng)目的開發(fā)和代碼的質(zhì)量沒有更好的要求自己。有時(shí)候也應(yīng)該主動(dòng)的去學(xué)習(xí)和思考一下項(xiàng)目中的代碼應(yīng)該怎么寫。能不能提高一點(diǎn),在完成任務(wù)的同時(shí)還需要對(duì)自己要求高一點(diǎn)。剛開始可能工作比較認(rèn)真,到后來也會(huì)發(fā)現(xiàn)工作不夠熱情,對(duì)于項(xiàng)目和代碼的激情也開始減少,這都是應(yīng)該思考和反思的 。
感慨
從畢業(yè)到現(xiàn)在也已經(jīng)工作四五年了,本來以為可以一直做.net的但是還是換了方向,但是一些基礎(chǔ)的編程思想都是相同的,比如數(shù)據(jù)結(jié)構(gòu),面向?qū)ο?,接口。一般的開發(fā)語言只是語法的不同,但是基本思想基本差不多。只是其適合使用的場(chǎng)景不同,例如編譯型語言適合后端開發(fā)和一些大型的系統(tǒng),例如java和C#。解釋型語言比較適合web方向的開發(fā)比如php和python等。不知道還能寫多久的代碼,工作到現(xiàn)在進(jìn)步也不是很明顯,大多數(shù)程序員基本都是寫需求。那一份還可以的薪水,勉強(qiáng)養(yǎng)活自己。要賺錢還是需要有其他的方向。工作之余也要考慮一下未來的路該怎么走,不可能寫一輩子代碼。最多到30多歲,要找到自己方向吧,工作時(shí)間越久想找到一份好工作也越來越難???0了也有一定的危機(jī)感了,人最怕溫水煮青蛙。所以趁年輕還是多學(xué)點(diǎn)東西,不能到最后才發(fā)現(xiàn)想轉(zhuǎn)行已經(jīng)不會(huì)其他技能了。是很痛苦的一件事情!這句話是給自己說的,要加油,要努力!