【265期門診集錦】如何全面、深入地掌握Android系統?

  技術門診是51CTO社區品牌欄目,每週邀請一位客座專家,爲廣大技術網友解答疑問。從熱門技術到前沿知識,從技術答疑到職業規劃。每期一個主題,站在最新最熱的技術前沿爲你引航!

   本期門診特邀Android系統開發專家羅昇陽老師,將針對Android應用開發學習過程中遇到的問題給予解答歡迎網友積極提問,與專家一起討論!

查看本期門診精彩實錄:http://doctor.51cto.com/develop-279.html

精選本期網友提問與專家解答,以供網友學習參考。

Q: 羅老師,你好:想問一下,android基礎一點的應用,也懂一點,常用的組件,service,簡單的框架,跟着網上的例子,也會寫一點。但是,想深入就不知道怎麼學習。只學過java。以前沒有學習過c、c++和linux,請問下,想深入一點的學習android,該怎麼入手,怎麼學習linux效果更好一點?
A: 如果你是想學習Android系統開發的話,那還是需要有C/C++和Linux內核基礎的,另外Android應用開發也要了解一下,主要就是熟悉一下四大組件的用法。Linux內核有四本書是比較經典的:
1. Linux Kernel Development
2. Understanding the Linux Kernel
3. Linux Device Drivers
4. Linux內核源代碼情景分析
 

Q: 前輩您好,我是一名做java web的草根程序員,一直有興趣想開發安卓遊戲,策劃都寫好了,但真正學習和開發的過程中卻不是那麼容易。請問安卓應用遊戲的開發與其他開發是否有區別,個人開發優秀應用的流程和應該注意哪些問題。謝謝羅老師!

A: 在安桌上開發遊戲一般都是在現成的框架上開發的,如Cocos2dx、Unity等,如果你熟悉這些遊戲框架的話,相信在安桌上開發遊戲是不難的。在移動上開發遊戲最需要注意的一個問題是性能,性能不行的話,電池會吃不消的,玩着玩着手機可能就沒電了。
 
Q: 你好,我是一名iphone開發人員,涉獵過android開發,我瞭解android底層開發應用的是linux 和 c,
1.那對於初入android底層開發的人員,最先從哪裏入手比較合適或者比較容易?
2.現在在表層應用需要很多創意性的顯示和操作控件,供用戶使用,爲了更好的滿足用戶的對應用使用的友好度,我們往往需要自定義或者重寫一些控件,請問這種做法在某種意義上是否提倡?還是說提倡簡約爲好,不需要花哨的設計、動作?
3.iphone開發的基礎有C/C++,Objective-c,數據結構。android開發的基礎除了java,c/c++,xml還需要了解哪些內容?
A:
1. 熟悉C/C++、掌握Linux內核基礎以及Android應用開發基礎,這三樣東西準備好之後,就可以去研究Android的系統代碼了。在研究之前,最好先看一下它的HAL層是如何實現以及使用,這樣會使你快速地掌握整個Android的架構。
2. 提倡的。移動應用是很強調用戶體驗的,因此,每個公司的產品都會有自己的風格。如果有自己的一套封裝,或者說框架,那麼就不單止可以統一自己的產品的風格,還可以加快開發速度。
3. 和前面1的回答一樣了。
 
Q: 羅老師,您好,很有緣,咱們同姓。我學android開發快一年了,這一年來都是邊寫應用邊從網上學習,越來越發現,android系統遠不是想的那麼簡單。要掌握並且靈活的開發應用還真不是件容易的事情,比如說比較常用的listview,自定義adapter在每個item後面添加checkbox,可是每次點擊一個checkbox爲選中狀態,後面的部分checkbox也同時勾選上了,遇到這樣的問題該怎麼解決呢?謝謝!
A: 握手:)。邊學邊寫應用很好,其實碰到問題的時候,首先想到的在網絡找答案,Google、Baibu、StackOverflow等,一般來說,你碰到的問題別人也有可能碰到的。如果在網上確實是找不到答案,那就可以跟到系統代碼去看看,源代碼開放的好處就在這裏。配置好環境,把Android系統的源代碼下載下來編譯好,然後把你的應用放到編譯出來的系統裏面去調試。
 
Q: 羅老師 你好,現在在一個培訓機構學習android 感覺學android的時候和學Java web開發的時候不一樣 老師講了很多感覺記不住 而且老師講service 還有異步任務以及短點續傳的時候 因爲以前在Java中沒有弄過,感覺好難
A: 我個人是不建議去培訓機構的,軟件開發很多東西不是靠記的,重點在於理解,以及工程實踐。你理解了一個東西,在做工程的時候,如果碰到問題或者有不清楚的地方,可以參考幫助文檔,可以在網上找答案。對Android應用開發來講,重點就是要理解它的應用程序框架層,這方面的知識其實在官方網站上都有很全面的參考的了,所以關鍵是你要多練。
 
Q: 羅老師,您好,在使用AIDL的時候,感覺像是使用'透明的 ' 代理 ' ,AIDL的底層是怎麼實現的,AIDL是怎樣的一種機制呢?
A: AIDL其實是一個Binder進程間通信機制的接口描述語言,和COM裏面的IDL是類似的。簡單來說,AIDL是語言無關的,即不能直接使用。例如,如果要在Java語言裏面使用一個由AIDL定義的接口,那麼就首先要使用工具來將相應的AIDL文件翻譯成Java接口文件。在翻譯成Java接口文件的過程中,還會生成相應的Proxy和Stub類,用來封裝底層的Binder進程間通信。根據這個原理,不使用AIDL,自己用Java語言來直接編寫一個Binder進程間通信接口也是可行的。事實上,在Android系統中,有很多服務接口就是直接用Java語言來編寫的,而不是用AIDL來定義。
AIDL文件的解析可以參考這篇文章:http://blog.csdn.net/luoshengyang/article/details/6642463
直接用Java語言來直接編寫一個Binder進程間通信接口可以參考這篇文章:http://blog.csdn.net/luoshengyang/article/details/6651971
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章