感覺安卓應用開發就是一些介面的調用和ui界面的邏輯處理,還有其他可以深入學習的嗎?
謝邀。
ServiceManager、ActivityManager、packageManager 、*****Manager 都弄懂了?
Binder 也搞清楚了?
IPC 也弄明白了?
FrameWork 層的每個類都折騰了?
Hook 會玩了?
各種 SystemService 也知道怎麼運行的了?
View 的渲染你明白是怎麼回事了?
Intent 是如何實現 Activity、Service 等之間的解耦合的?
單元測試會寫了?Monkey 能跑多長時間?性能測試通過了?
ClassLoader 和 DexLoader 會玩了?
Context 是個啥你也知道了?
許可權機制也弄清楚了?
觸屏事件的分發呢?
Handler 、Message 和 Looper 是怎麼跑起來的?
如果上面超過一半的東西題主還沒有弄清楚,洗洗睡,明天早點起來看書。確實,一些客戶端與伺服器的數據交換方法、UI操作方法足以滿足大部分的需求,這些問題你可以參考一下,勿噴,我的專業是日語:
- Android App的生命周期是什麼;
- 四大組件很熟悉了吧,ContentProvider的生命周期是什麼;
- Android設備開機的啟動過程;
- Activity的視圖層次是什麼?打開一個對話框的時候,這個對話框是如何加入到視圖上去的?
- Dialog、PopupWindow、WindowManager載入視圖的區別;
- Service與Thread的區別;
- ServiceManager、ActivityManager、XXXManager是幹什麼的;
- 為什麼一定要在UI線程更新視圖,為什麼要這麼設計;
- 能不能直接New一個Activity並啟動它;
- 打包APK的過程幹了什麼;安裝APK的過程幹了什麼;啟動APK的過程幹了什麼;怎麼玩DexLoader(動態升級);
- MVP模式是啥;
- View的生命周期是啥;TWEEN動畫跟熟悉動畫在View的繪製過程是怎麼作用的;自定義動畫玩過嗎,裡面的Matrix怎麼控制。
- res裡面的XML資源最終都要轉化成JavaCode,怎麼完全脫離res,用純代碼的方式實現res資源的功能,怎麼縮放一張點九圖;
- Binder原理是什麼,出了Binder之外,還能怎麼跟Service交互;
- Touch事件的分發機制;能不能用代碼模擬一組TOUCH事件(比如自動點擊廣告,自動滾動);
- ROOT的原理是什麼,系統是怎麼管理APP的許可權的;
- Material Desgin這麼好看,為什麼不出兼容包,讓5.0以下的系統也能要動畫效果;ART模式與Dalvik有什麼不同;Render Thread是怎麼工作的;
- 為什麼TMD不把功能都用H5實現然後把需求都扔給前段的人去做;
嘗試回答這個問題,我也從最小白的Android開發走過來,從事Android開發4年有餘。現在算不上高手,但也曾獨立開發出三款商業應用APP,擁有上千萬的用戶,有一些感觸。
樓主產生這樣的困惑也是很正常的。Android發展至今,與後端層出不窮的技術比起來,冒出來的新東西並不多,而在大部分公司的Android開發,也基本都是UI層、業務邏輯層的東西,大量時間用來調界面,改bug,做了兩年的確會感到遇到瓶頸,有意思的東西不多。
但這並不是Android的問題,作為一款世上最流利的移動操作系統,Android博大精深,值得深入研究的地方太多,其他人也在各自的答案中提到很多了。出問題的地方在於你對自己的定位,你之後還想要做哪些事情,想要往哪些方面發展。
- 如果一直想要從事APP應用層開發,在掌握了Android基本的知識以後。可以把注意力更多的放在應用性能調優、多機型適配、APP框架設計等方面。多問問自己,自己開發出來的APP是不是在各個機型上都能流暢跑起來了?在不同的網路環境下是不是都沒有問題?下次再重頭開發一款應用,是不是能有更好的框架設計,更迅速更穩定的出一款產品?
- 如果想擴充知識面,或者需要往底層發展。那framework層框架代碼、JNI調用包括基本的C語言,又是完全不同的知識層面,需要花功夫去學習。也包括了Android系統上的多媒體服務、Opengl圖形框架等等。
- 閑有餘力的話,可以在Github上follow一些優秀的開源庫,閱讀源碼,弄清楚原理。也可以自己造一些輪子,做一些通用性強的自定義組件供大家使用,也會是很耗費時間同時會很有用的事情。
性能優化,GC,Android Framework源碼剖析。
任何一個軟體的難度最大的因素在於規模 在於使用量 不展開解釋 懂的自然懂
獨立開發過幾個產品,說一下自己的見解,基本上有完整經歷過一個產品的開發過程都應該清楚UI層是應用開發中最常變的一部分,app開發者絕大部分的時間都花在UI微調上,而業務邏輯基本上需求定下來不會變動太多,除非是產品迭代一些功能性的追加,不然就是不停的堆UI、堆UI,干過兩年以上的開發者基本的開發能力已經有了,業務能力也差不多,這時候會遇到瓶頸,基本上就是找不到更加深入的方向,這個時候就可以考慮一下自己參與過的產品所使用到的技術是自己深究過的,打個比方,開發app的時候,一般會用到Http框架,這樣的框架你是否有真正去實踐過,或者有研究過它的實現思路和設計思想,我們一般都會拿過來用,但為什麼要這樣設計就是我們需要去了解的,這可以提高你的架構的設計能力和編碼的水平,除了框架,更多的是深入framework層相關的,一些特殊的需求,比如動態熱更新、插件化的實現,對應用開發者來說都是新的挑戰,還有對app的性能調優,產品上的優化,這些東西都是可以根據其中某一個點進行發散的。只做UI層的嘗試是沒有什麼前途的,不管幹多少年,眼界也是極其有限,做技術的只能不停的深挖,構建完整的知識體系,才能打通自己的任督二脈。我個人的一些觀點,僅供參考。
越學感覺自己什麼都不會,越學會發現自己有更多的東西需要學習。。。。。
你的開發技能最終將反應在產品和業務上,換句話說,你之所以認為目前的Android開發只是簡單的調用api,是因為你沒有接觸到「複雜度」到達一定程度的業務和產品。
你可以嘗試了解下一些 『super app』 的架構,如微信、qqzone、手機淘寶、bat的安全類產品等。
下面簡單羅列幾個技術方向以及該領域部分優秀項目或文章,選取規則純個人喜好,僅供參考,不喜勿噴:
- 性能優化Android性能優化典範https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
- 架構https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.htmlhttp://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/微信Android客戶端架構演進及其對開發流程的影響
- 插件化/組件化houkx/android-pluginmgr · GitHubsingwhatiwanna/dynamic-load-apk · GitHub
Qihoo360/DroidPlugin · GitHub
- 安全/黑科技看雪移動學院進擊的Android注入術《一》rovo89/Xposed · GitHubalibaba/AndFix · GitHub
結束語:學的越多,知道的越多,你『需要知道』或『想要知道』的會更多;積累你的技術經驗,用以『合理操刀』不同公司的業務。
可以試著研究一下Android的安全問題
給你截了張圖,你感覺下。
對於AOP,不知道你有沒深入理解過呢。
對虛擬機DVM.ART你看深入理解不,能不能做點針對性優化,或者覺得這兩個都不行,你可以弄一個自己的VM出來不,阿里也有一個自己的雲os的,應該可以給你拿來練手。這個熱修復背後涉及的知識不知您掌握如何,像AndFix這個庫,樓主你寫份分析帖怎樣?或者你也造一個,這個就不純粹是調API,有點需要探索的內容了。插件化機制目前有不少套路,這個就不止調用API啦,其中還是涉及到不少知識點,你看能不能試著造一個?你看以上幾個問題都弄精通,應該還是挺有搞頭的吧?說的好像做應用開發就不用關注 oom anr 動畫幀率 網路連接優化 重要數據加密 事件分發 。。。。說的好像cpu 內存都不要錢似的
來看打臉
先不說更深的,能把稍微複雜一點應用(微博就行)的所謂介面調用和UI界面的邏輯處理寫好就算牛逼。怎麼算寫好?我的標準是每次有流程上的修改,代碼修改不超過10行,老功能刪除後代碼修改不超過5行,新功能接入(不包含開發)現有流程代碼不超過5行。其實就是解偶加上可維護可擴展性的優化,不用每次升級都累的跟狗似的。
建議樓主去看主席的一本《Android藝術之旅》,你會發現一個不一樣的Android。
你說的是對的,安卓本身可能就是一門技術,ios可能也是這樣。我剛開始從做遊戲轉到應用來的時候,我也是這麼覺得,這不就是做UI嘛,有啥學的呢。
事實上,不是這樣的,很多東西做出來,達到60分,可能很容易,不過80,90就比較難了,很多高大上的東西和技術往往是提升20,30分準備的。說回來技術,有哪些技術【網路技術】安卓應用脫離不開網路應用,用什麼樣的網路結構,和服務端如何交互,前端如何設計。【架構和新技術】MVP, MMVM,數據注入,響應式編程(感謝知乎網友,這些都是在知乎上學習的)【關鍵技術模塊】,比如美圖秀秀之類的,即時渲染這種。【工具和系統】debug工具,系統底層的了解移動的端的開發一直是富於變化,並飛快更新的,新技術層出不窮,還是潛心研究吧。應用寫到最後還是要和底層一起干,系統的東西也是博大精深,學習的路很長,如果你有這樣的困擾,說明你接觸到的層面還很淺,我指的是層面是系統的分級
優化。最有體現你水平的就是優化,你能優化到什麼層次是體現你功力的地方
關鍵還是軟體架構的設計,設計模式都搞懂而且靈活應用,這是個漫長的過程。
那你動畫效果玩的溜嘛?
吾日三省吾身,來此打臉也
推薦閱讀:
※iOS 開發初期之後怎麼提升?怎麼才能叫精通?方向在哪?
※網易最成功的移動互聯網產品是什麼?
※你看過哪些最具諷刺意義的圖片?
※谷歌是怎樣的一家公司?
※如何看待手機QQ部落的興趣社交?