Android開發初期之後怎麼提升?怎麼才能叫精通?方向在哪?


先mark一下,好多人我發現始終停留在兩三年的水平上沒有突破。

另外還有一個誤區就是越底層越牛逼

第三個就是,我認識的大部分所謂的做過rom開發的對framework的熟悉程度遠不如我一個一直做應用的,大概是見木不見林,始終在那一個小角落裡修修補補,不會橫向,也沒有縱向延伸。另外這裡很重要的一點是基礎,比如你是否有*nix基礎,可以幫你快速理解很多東西

晚上有時間的話把這三塊展開說一下

---------------------分割線,這麼多評論,壓力好大-----------------------

首先第一個問題:為什麼很多人會一直停留在兩三年的水平上,而後一直在重複以往的經驗?

我認為最主要的一點就是主觀能動性,或者說興趣,如果你對Android開發沒有太大的興趣,那麼還是儘早換方向吧。有了興趣,然後就是要有一個比較正確的鑽研路線,不要這也搞那也抓,最後什麼都沒精通又好像什麼知道。一個很好的例子就是我用過很多庫啊 @MagiLu 藝哥也提到過,很多面試者以用過很多庫為榮,你真的去了解過這些庫么?

我覺得一個比較好的路線是,把日常開發常用的各種系統庫,開源庫,代碼好好研究一遍,比如我用了butternife就要了解背後的apt,以及apt衍生出來的一系列庫比如Hugo。當然這大部分情況是初級進階的第一步。這個階段應該是盡量很好的用技術完成業務需求。

第二個階段,我覺得可以嘗試去了解Android Framework比較細節的一些東西,比如activity啟動流程,順便分析清除Activity stack的管理,比如了解Android的資源載入機制,順便了解aapt是如何打包Android資源的;又比如Java的類載入機制,這裡配合資源的載入機制,很自然的就可以去了解Android的hotpatch機制,插件化的實現,開一些這方便的開源庫或者自己擼一個也就自然而然。這裡我比較推薦 @Gityuan 同學的一系列博客,分析Android各種源碼很不錯。這個階段你可以用技術反哺業務,比如插件化和hotpatch就可以讓業務更加靈活。

第三個階段,橫向擴展,到這個階段並不是說比第二個階段更加高級了,而是對第二個階段的一些補充,比如你是不是可以了解一下web開發,這樣做hybrid開發的時候就會更順手。是不是要了解一下這麼火爆的ReactNativeWeex技術,甚至可以把他們的一些思想拿過來自己用,比如我司內部就有很多項目是用了JSCore和CssLayout來實現一些更輕量的動態化技術的。正如科學領域很多重大貢獻都是在交叉學科領域出現的。技術上到了這個階段甚至可以做到技術影響業務,技術驅動業務。

第二個問題:技術越底層越牛逼么?

其實大部分技術都是為了滿足業務需求,我認為這種場景下,是能越好的反哺驅動技術才越牛逼,和底層不底層沒關係。比如你app做的非常牛逼,交互和性能非常好,直接帶動業務飛速發展,我覺得你並比能做底層人差,術業有專攻,以你的態度和能力,即使去做底層開發,也是沒有問題的。

第三個就是為什麼很多做rom的反而對Framework不是很熟悉

我覺得這個和第一個問題有些重複,興趣是很大的原因。另外一個問題就是,如果沒有*nix的編程基礎,底層的一些東西比如binder機制,比如runloop可能會有一些吃力。這裡服務端的同學可能會有一些優勢,他們對rpc和一些系統調用相對熟悉一些,這也是為什麼很多後端轉到Android的同學可以快速精通。

------啰啰嗦嗦寫這麼多,請大家來拍磚-------

------最後,我再加一條廣告-----

蝦米音樂Android在招人,如果你想來和我們一起打造一個有情懷的產品,那麼歡迎您來杭州加入我們的團隊。(好多同學在私信我要求,大概說一下是招P6+,P7的)

是的,我們正在努力,為了打造一個精品。

請私信或者微信聯繫我


我猜你這個階段是把大部分demo都能跑通了吧,常見的控制項也會了吧。

但是,你現在還是會的太少了。

就是會用Linearlayout/relativelayout/button/textview/edittext/imageview(的很少一部分屬性)來畫一些簡單的界面了吧。

就是會用activity/fragment(的生命周期這麼少的知識)來讓ui在手機裡面顯示出來了吧。

就是會用asynctask(這麼簡單的一個過時的類)來網路請求了吧。

就是會繼承了個Application類來接幾個第三方服務(幾行代碼就接入)了吧。

就是會用個broadcast(估計只會最基本的顯式廣播,排隊廣播,粘性廣播啥的都不會用)了吧。

就是會ListView+BaseAdapter+ViewHolder(總共不到10個重載的方法)或者recycleview+adapter(估計不會自定義layoutmanager,估計沒才過itemanim的坑)來展示數據了吧。

這總共就多大一點知識啊,學的這些東西內容這麼少,不迷茫才怪。

如果我說屈你了。

好。你說你比這強。

都會自定義控制項(總共就measure draw layout這三個方法)了,還會volley(代碼寫的一堆callback hell),還會sqllite(這玩意沒多大用,也是死東西)勒,還會xml裡面定義動畫(就平移 反轉 透明 旋轉 屬性這幾種)勒,甚至你還會eventbus(別說只會onEventMainThread哦),你還會rxjava(學過函數式語言的都感覺這沒啥)。

你說你還追新,md控制項玩的溜的很,toolbar(兼容到4.4的沉浸式狀態欄會用不?)會用,drawerlayout會用(碰到過與surfaceview衝突的情況不?),還會用coordlayout+collapsinglayout+recycleview來做隱藏額頭(知道那個collapsinglayout中的mode是幹啥的不,自定義behavor會不?:)

這些都會了不?

啥,你都會了?再留個作業。

APP裡面的main在哪?

別的桌面應用框架像Qt,人家顯示控制項都要new一個window,那咱app的這個渲染控制項的window在哪new的,咋讓咱屏幕聽話跟著畫的?

咱手機這麼多感測器,那感測器數據咋來到咱app的?

那manifest在咱手機裡面咋滾輪的,發生了啥,系統咋處理的?

我在美團裡面能打開支付婊的支付界面,這在咱手機裡面發生了啥?

我提出來的這些都感覺虛?回去大量學習然後寫代碼吧。我的這些也不是專門找書看的,而是長期開發來排除各種bug,期間讀各種大牛文章,甚至翻了dev/framework層源碼理解來的。

多花時間吧,花大把大把的。


在上一家公司當過一段時間的Android面試官,發現很多「精通」Android的候選人簡歷上都會寫使用過XX開源庫並引以為傲,如果在面試的時候沒有問到這些有的還會對我提出質疑。拜託,這就叫精通了?這真的很有挑戰性么?

怎麼樣算一名優秀的程序員?我認為最基本的要求是有高效的產出。回到Android上,一名優秀或者題主說的精通Android的程序員也應如此,高效的產出高質量代碼,迅速解決開發中存在的BUG,對於需求提出合理的解決方案,不間斷的學習和分享。而精通的開端,就是從一個使用者,變成創造者。輪子誰都會滾,而造輪子的,才值得尊敬。

那怎麼成為精通Android的開發者?看,寫,思考,總結,交流,這條路沒有捷徑。我認為精通Android的開發者至少需要具有紮實的C++/Java基本功,微機,網路通信,數據結構和演算法基礎,熟悉Android的大部分組件,常用開源庫,豐富的Debug,適配經驗以及持續的學習能力。


很多人都提供了非常不錯的答案,我也是受益匪淺,謝謝各位。

但是我覺得很多排名靠前的答案都給我感覺,思路太中國式了,像中國的考試一樣,追求難題,追求窮盡真理。比如 @陳昱全裡面提到的那個面試,比如 @田元提高的app 的main在哪兒。我不是說這些沒用,或者不重要,但是我想這些知識點可能對於一個初學者進階的人來說,就算查到了答案,也理解不了。所以說一下我對這個問題的看法,只求拋磚引玉。

第一個建議,對於一個junior developer,如果想往上走,在強化知識體系的之前,我往往建議先完善自己在debug tools上的經驗。

比如:

網路debug tools: Charles, mitmproxy, Stetho

內存泄露:Memory Analyser, Leak Canary

Overdraw: 手機上的Drawing Settings, AVD Manager/Layout, Stetho

資料庫和cache: Stetho,SqliteManager

還有最原始的,利用logcat打log,分析log並且知道各種參數,比如-v time顯示時間,-s做filter等等

中國有句古話,工欲善其事,必先利其器。將各種debug工具掌握好,有利於更快地從Junior level提高上來。

第二個建議,提高自我表達能力。我在面試facebook的時候(別問細節了,沒過),有一個題目很有意思,來說一個你比較了解的工具或者api,whatever什麼玩意都可以,看你能否有邏輯地、準確地將某lib的整個框架描述清楚,比如優缺點,比如運行流程和坑。在這裡面,ABCD的某個環節中,你可以說你在B上內部邏輯不清楚,但是input 和output一定要說出來,如果能說出limitaion就更好了。

這項能力的好處是,「準確而有邏輯地表達」往往需要清晰的頭腦、豐富的知識儲備,這項訓練在programming中是非常有好處的,我發現凡是口頭表達邏輯很清晰的人,編程coding邏輯感也非常強。有好的邏輯思維的人,成長是極快的。

第三個建議,如果追求精通,不要一上來就追求對整個Android的精通,要先追求模塊的精通。有些人強於寫googlemap,有些人對Volley庫極為熟悉甚至被merge過很多pr,有些人可能對動畫非常了解,甚至有些人專門研究android相機保存圖片等。其實等你很熟悉一兩個模塊後,你會發現其他的東西很容易觸類旁通,就算不看代碼,猜也猜得到。

第四,提高英語能力。以前在國內只用baidu,後來出國了之後用英語才發現,簡直是多長了一個腦子的感覺,高質量的文章比比皆是。所以如果英語好,在IT skill上的進步可能會快好幾倍,真的不誇張。

最後,不要被面試官嚇到,他的問題肯定是經過準備的,沒準他比你早知道不了幾天這個問題的答案並且從來沒在真正項目上apply過。不知道就說不知道,不過我一般會建議在不知道的問題上猜一下,並非瞎猜,只是告訴他「這個問題我確實沒研究過,不過以我對android的了解看,應該是哪兒哪兒的問題或者應該是由於某種機制產生的」,目的就是顯示我對android很了解,很有信心。因為誰都不可能在工作中不查看新的東西,只用舊知識的公司應該是不存在的。

最後再次感謝@陳昱全 和 @田元,二位說的很多問題我也不懂,趕緊去查一查,多謝!


我們先來對問題分解一下:

Android 開發 :

分成成

1. "開發" 一般的開發技能

2. "移動應用開發" 移動應用開發相關概念思想

3. "Android 開發" 特指與 Android 開發直接相關知識技能

正如你可能所想的那樣,這樣的問題不像1 + 1等於2那樣,有一個簡單確切的答案.

真正答案因人而異. 下面我以自己幾年的Android 開發經驗,與你分享一二.

就按我上面所分解的幾個方面來說一說:

一: 開發技能

你可以看成是一般的編程技能

這方面你可以從

編程語言的熟練掌握

面向過程編程思想

面向對象的思想

函數式編程思想

設計模式

演算法與數據結構

網路編程,TCP/IP 協議

重構

版本管理(Git 等)

等方面的檢查和提高自己

更詳細的技能樹,請自己搜索

二: 移動應用開發

你可以看成是 App 開發

估計這可能是你更感興趣的

這方面你可以從: MVC 這成三個方面來對照檢查下

M: 數據層

移動應用數據結構特點

數據存儲 :SQLite資料庫,文件存儲

數據格式: XML 格式,JSON格式 序列化與反序列化

數據查詢: 移動應用一般資料庫主要是 用SQLite

(說回來,單是 SQLite 資料庫,就可以花不少時間來深入學習下,

因為對一個應用來說,數據基本是核心)

V: 視圖層

移動應用界面特點

移動應用構建界面常用方法

移動應用交互特點

移動應用動畫

系統 UI 系統特點,優點,缺點及局限

C: 控制層

移動應用控制層特點

控制層的生命周期

多線程,UI 線程,後台線程

再加一層:

E: 事件層

事件處理,觸控事件,手勢,事件響應鏈

三: Android 開發

工具篇 - 工欲善其事,必先利其器

Android Studio 掌握用得怎麼樣了?

Adb 及相關工具會用嗎?

Gradle 構建系統呢?

文檔篇 - 看 Android 官方是怎麼定義開發各種技能的.

相信常看 Android 開發者官方網站,你會收益良多,我下面寫的也不必看了.

系統篇

Android 多線程編程,非同步編程特點 - Loop,Handler,IntentService,Broadcast

,MessageQueue

Android UI 框架特點,優勢和不足

然後你再按 MVC 將 Android 各部分再分析分析,總結總結.

未完待續


關注進階知識,多嘗試做框架設計,系統性能優化


我本身對安卓開發一知半解,但是也算親眼見證了幾個大牛(不僅限於安卓)的成長,所以給一點我所知道的辦法。

1。面臨一個解決不了的問題的時候,最初階段放棄百度,放棄google搜索。盡量做到只依靠安卓官方文檔。

搜索引擎是一個黑匣子,問他「xx問題應該怎麼解決」,它會忽略掉一切中間的思考,分析,解決流程,給出最後的答案。

其結果就是,使用答案的人基本上不可能理解「為什麼這麼去做」,只知道「可以這麼做」。 就像一個沒學過加減法,只會用計算器的收銀員,有計算器能工作,但是恐怕沒有心算的快。複雜的問題如果計算器不會算,他也不會。

等到通過基本的文檔自己找到了思路和方案,再去看看有沒有別人寫好的第三方的東西,或者成熟的方案,再和自己的東西印證。

這要花很多的時間,會比別人慢,會把別人休息的時間用來加班。 但是大牛如果是睡覺打遊戲就能養成的,這個問題也不會出現了對不。

2。安卓系統源代碼要常備。跟蹤代碼時候,儘可能跟到系統的層面,越深越好。至少sdk要進去。

不了解sdk的代碼,自己就很難寫出同級的代碼。好代碼看的多了,自然自己的水準也會提高。熟讀唐詩三百首嘛。

3。如果代碼沒有按預期的去動作,不要第一時間想著去解決這個現象,而是要追究為什麼會發生這個現象。

比如程序崩潰了,加個try catch自然解決了這個問題。但是這麼做就太糟了。

自然要問問,為什麼會出現這個exception?底層的返回null了,上層沒處理。哦,加個判斷就好了。這樣好一點,但是仍然很糟。 底層為什麼會返回null?如果null是合法的返回,文檔里有沒有約定?如果沒有約定,文檔有問題,如果約定了,代碼有問題。更主要的是,其他地方是不是犯了同樣的錯誤?我是不是存在「不注意文檔約定」或者「寫文檔時候忘記約定」這樣的問題?

到這個地方,才真的對自己的成長有所幫助。大牛也是一步一步走上來的。

4。多把自己知道的東西教給別人。 比如寫一些知識和技巧跟大家分享,或者召集一個公司內的小培訓。

這樣做的好處有兩個。

第一自己得到了鍛煉。把知識系統化總結,對自己是一個回顧,整理,沉澱的過程。這個過程中可能會找到自己尚欠缺的地方,也可能會被別人的提問啟發。

第二是能逐步樹立自己的地位感,成為大牛也是一個正向激勵的過程,往往是牛人越來越牛,普通人越來越普通……

5。不要放棄任何一個提高的機會。

工作中很多任務是使用已經知道的東西來做。時間長了就會覺得都是重複勞動。

可是真的是這樣嗎?我所熟知的方法,就是最好的方法了嗎?是否有更優雅高效的方式?答案是一定有,沒有最好,只有更好。功能上覺得已經實現好了就提高效率,效率已經很高了就改善結構,結構優化清晰了就試試分析有沒有未來可能的需求變更,能不能應用設計模式,等一圈都走下來,回過頭一看,原來功能上還不夠完美啊。


這兩天面試也一直在跟來面試的兩個有三年工作經驗的程序員聊這個問題。

你的程序要實現某個要求的功能並不是太難,尤其是一般生活中用的App,遊戲另說。

但是要把你的App做的別人一看就覺得好看好用,那是非常非常困難的。

這兩個人一個iOS一個安卓,給我看的是同一個應用(是的,來自同一家公司),在把手機遞給我的時候兩個人都說了同樣一句話:界面有點丑。

界面丑當然是產品經理和UI、UE的問題,但是,程序員的問題也是顯而易見的,你為什麼要做一個自己都覺得很醜的應用?還把這個當成面試的敲門磚?而且我跟他們強調,當時UI做出來的設計稿一定比你這個成品要漂亮,不然不可能通過老闆的審核,而且水平再差的UI隨便畫個界面出來也不至於難看成這樣。肯定是你們在做的時候丟失了細節,而後產品經理和老闆都無可奈何,因為你們說做不到他們就沒辦法。好的應用的第一個必要條件,就是要讓用戶第一眼能夠接受它,你們手機里那些自己覺得很好用,天天用的應用,有哪個完全是因為功能不可替代而忍受它難看難用的界面的?(網銀App除外)

而要做到一個能做出漂亮的界面,細緻的動畫,流暢的交互的應用,對程序員的考驗是非常非常大的,對安卓開發人員更甚。以前我花了兩個星期的時間想模仿出Cal這個應用頂部那個日曆的各種滑動效果,最終只能模仿出7成,還差的那3成在功能上是一模一樣的,但在細膩和流暢上就始終差那麼一大截。


能力還不夠答這個題目,還是嘗試答一下,我用我自己得例子來說明下。兩個例子。

1,資料庫索引優化

以前做一個項目數據量很大,然後想做優化,一頓加索引然後發現反而更慢了,於是乎去研究下發現聯合索引更快索引超過5個後明顯變慢,也更適合層級遞進查詢,但是原理不知,於是乎去了解索引的原理設計,從而讓自己有能力下次去避免這個問題或者做的更好。

2,一次面試

記得handler和looper得模式經典面試題,人人都能淺談下。那麼你知道sendmessagedelay如何實現的,handler得生命周期如何,跨線程是如何通信的等等。當詳細問下去的時候很多人是不知道得。很多人會知道handler生命周期長做靜態內部類加索引用,但是你知道為什麼嗎?我當時就是一問三不知,回去趕緊查看源碼了解管道,epoll模型等。

這兩個例子不是表明我精通了安卓了,我也只是知道點開發皮毛。但是總看到很多高手得精通其實就是當他遇到問題解決問題的時候會比我們多去想想為什麼,當你知道為什麼了才是精通而不是單純得技能。這一點我是做的不夠好的,希望15年自己能做的更好一點。


題主提出了三個問題:

1. Android開發初期之後怎麼提升?

  • 把 Google 的 Samples 全部跑一邊
  • 閱讀 Samples 的源碼以及 Samples 給的控制項的源碼
  • 了解所有的 Android 控制項的繼承關係,盡量都背下來。是的,你沒看錯,背下來。繼承關係的了解有助於你解決後面開發中遇到的難題。

我看了下 @田元 的回答,他說的那些東西,Google Samples 全都提供了。

他說的學習方式,我從文中看到推崇多學,但都限於用法的學習。

如果一直追求於用法的學習,一生都會被無休止的學習困擾,奔命於學習。

我個人還是建議多看看源碼。尤其是基礎的父類源碼。新出的東西看看繼承關係,翻一遍源碼即可。

(如對 @田元 的回答理解有誤,望指正。)

比如說新出的 Toolbar 繼承於 ViewGroup,如果多次閱讀過 ViewGroup 的源碼。對於新出的 Toolbar 只需看一遍源碼便知如何使用。如果熟悉了 ViewGroup,然後閱讀 Toolbar 的源碼(源碼兩千多行,基於前面的基礎,大部分代碼都無需仔細閱讀了),2 個小時不到就能完全掌握 Toolbar。

還有 @田元 所說的 CollapsingToolbarLayout、NestedScrollView 繼承於 FrameLayout。如果你對 FrameLayout 熟悉了,這些新出的 View 掌握速度將快的無法想像。

再次建議,跑 Samples,多閱讀源碼,背下繼承關係。

2. 怎麼才能叫精通?

私認為,你要是能回答小白提的任何 Android 問題,你都能對答如流就是精通。

:)

不要小瞧小白提問方式以及問題。

我組織了一個 『技術學習小組』,裡面很多人問我 Android 問題,我有一大半沒辦法直接答出來。

然而我做了六年 Android 開發了。

3. 方向在哪?

題主問得什麼方向?著實沒看懂題主的問意。

======= 補充點我解決 Android 難題的思路

關於解決 Android 難題的思路,我很贊成 @智靖遠 的答案。

我的路子基本跟他說的一致,略有差異,接下來我補充下我的思路。

寫 Android App 有一個 BUG 發生時,我的流程是這樣的:

  1. 使用 Debug 或者 Logger 調試分析代碼流程,這一步是為了了解執行流程,在了解的過程中,問題一般都能解決掉。
  2. 通過第一步,我們可以對代碼有一個清晰的流程認知,能解決掉自身的邏輯 BUG。
  3. 第 2 步如果沒有邏輯 BUG,剩下就是使用控制項本身產生的 BUG 。這時候就直接去閱讀源碼,理清源碼的邏輯流程,這一步能解決掉 90% 的 BUG。
  4. 還有 10% 就嘗試能不能通過繼承改變源碼的邏輯流程,然後解決掉 10% 中的 99% 的 BUG。
  5. 第 4 步遺留的 1%,就通過 google,善用 site:http//xxxx keyword。http 的 url 一般是 stackoverflow、github,keyword 盡量使用英文。


@Tinker 的回答對你來說是最直接的。

相信我,Sample絕對是你的不二之選,倒不一定非得都跑一遍,但裡面的Animation之類的很常用的還是要懂的。

1、基於語言規範,這個主要是java語言層面的,一個非常初級的範疇了。如果你對語言掌握的很好,那麼你就能夠很容易的把你的思想轉化為代碼。

2、基於設計模式,這個就有點兒業務相關了。有本書叫 《android源碼設計模式》,可以參考一下:你既可以對設計模式有一定的了解,同時也會對Android源碼有一定的認識。

3、基於系統源碼。 @智靖遠 的答案提到的源碼部分,非常贊同,很多時候你遇到的坑,都可以從源碼中找到答案——當然,這一部分,需要前面提到的語言基礎支撐的。

4、基於產品思維。最近身邊的很多有經驗的前輩都在跟我提到這一點,畢竟移動客戶端開發是面向用戶的,我們所做的大都是需求驅動的,我們的目標是讓用戶爽,而不是自己爽,所以我們的目標並不一定是技術多麼高深,而是做出的產品多麼人性化。還記得『一秒變白痴』的故事嗎?

5、最重要的,遠離百度。別問我為什麼。

好了,說幾點前沒有提到的:

1、入一款Nexus 5/5x/6/6p之類的親兒子,官方任一版本的rom都可以刷上去,這樣你在調試代碼的時候,只要將sdk配置為設備對應的版本,就能夠跟蹤到sdk的源碼當中——相信我,這一點足夠方便,也讓你足夠容易去實踐 @智靖遠 的建議。

如果不想投資這一筆,那搞一個Genymotion。

2、打開下面的鏈接,你會發現驚喜的。

AndroidXRef

GrepCode.com


389273716/android-skill-summary 我整理的一些進階知識匯總。ヾ(′A`)ノ?


你太過注重精通這種詞了,其實是你太注重別人對你的看法。

你項目做的越多,你就越厲害,哪怕是去面試,將你做的東西列出來,只要是有腦子的面試官,都能明白你的實力的。

看書,是絕對看不出個精通來的。


我見過的Android程序員都很菜,~~~


我應該和你處在差不多的階段吧,但是我對前進的方向並沒有迷茫。我現在是在看Java編程思想,看完之後我會將activity,view和其他android源碼梳理一下。然後是數據結構,一些演算法。再然後jni, c++也會去了解。。。現在見識還比較短,這是初步定下的路。還有就是平時多看博文,了解Android最新動態。後面有機會也想了解一下Linux


任何方面開發者所需的技能,大體可以分這幾種(去掉相關專業知識,比如你做驅動開發要了解一點電路,做網頁開發需要設計和審美,還有金融,圖像等)

0.基本功

1.解決過比較多的問題

2.再遇到的問題知道有哪些解決方案,並知道哪個是最優/最合適的

3.沒有遇到過的問題或者比較複雜的問題,能大概想出解決方案或者知道從哪裡能找到解決方案,換種說法就是能看出問題真正癥結在哪裡。

0 是學習,1 是練習,2 是態度,3 是智商


中級必備:

View相關(自定義view,view事件處理機制,view樹的繪製,view坐標系,view和window),消息機制,內存優化,ListView復用機制,屬性動畫,第三方庫引用。

高級必備:

FrameWork層(AMS,WMS,PMS,消息機制底層,系統和應用的啟動過程),Binder機制,JNI。

其他:插件化,熱修復,RxJava,React Native。


1 應用開發Java基礎要紮實,ndk開發c++基礎

2 開發工具要熟練idea(as),git(svn),gradle, jenkins

3.1 android ui繪製xml用的溜溜的

3.2 Android API 應用熟練

3.3 自定義控制項

3.4 圖片,動畫處理

3.5 網路編程

3.6 多線程

3.7 Android jni,底層開發

。。。。。


我做安卓時間不是很長,項目中用到了很多別人的框架,但是都不知道其根本原理,我覺得應該要知其所以然。然後自己這一套框架。


什麼是精通?主線程消息是如何傳遞的,子線程如何創建自己的消息隊列以及和其它線程如何通信等等,AMS、WMS、SM、InputManager如何協同工作的,Binnder實現原理等等,這些都了解嗎,即使了解了,如何在項目中應用,所以說難以精通只有循序漸進的學習。


推薦閱讀:

土耳其民間對中國印象很差嗎?土耳其官方對中國政府怎麼樣?土耳其對於中國重要嗎?
怎麼看待神舟推出的互聯網品牌「炫龍」?在筆記本電腦市場萎縮的今天,還有希望么?
新媒體編輯需要學習哪些技能和知識?相關輔助學習工具有哪些值得推薦的?
H5如今已經爛大街了?
為什麼感覺網上很多人都討厭楊冪?

TAG:互聯網 | Android應用 | Android開發 | Java | Android |