Android開發技術總結!五年Android開發者小米、阿里面經,附面試題答案

寫在開頭:

說下個人經歷吧。湖南大學畢業,學的是軟件工程,那時候比較貪玩,專業知識學的不是很紮實,畢業後就在長沙本地找了家互聯網公司工做了。
到今年六月份的話恰好畢業了五年了,同期和我一塊兒出來的同窗們,大多都已是項目經理了,至少也是個項目組長了,而我仍是個普通的程序員,日復一日的敲着代碼。
年初爆發了新冠疫情,居家隔離。市場經濟也進入了寒冬,大批的企業都是風雨飄搖,也包括個人公司。這時,我才意識到。進大廠,是多麼的重要。android

內存泄漏是什麼?

內存泄漏即 ML (Memory Leak) 指 程序在申請內存後,當該內存不需再使用 但 卻沒法被釋放 & 歸還給 程序的現象git

內存泄漏有哪些狀況,對應的解決方案?

內存泄漏的緣由歸根到底就是當須要被回收變量的內存被其餘變量引用持有,致使內存回收失敗程序員

常見的緣由有:github

1.非靜態內部類/匿名類

  • 緣由1:非靜態內部類/匿名類 Handler持有外部的Activity/Fragment對象的引用,致使Activity/Fragemnt被銷燬的時候沒有被回收數據庫

  • 解決方案:緩存

    1. 將Handler類改成靜態內部類 + 弱引用(WeakReference)持有Activity引用(靜態類默認不持有外部的引用)
    2. 當外部類(通常是Activity/Fragment)結束生命週期時,清空Handler隊列
  • 緣由2:非靜態內部類的實例(對象) = 靜態實例 (其生命週期 = 應用的生命週期)多線程

  • 解決方案:架構

    1. 將該類改成靜態類(靜態類默認不持有外部的引用)
    2. 將該類抽出來封裝成爲一個單例
  • 緣由3:多線程 工做線程正在處理任務時外部類須要銷燬,此時工做線程持有外部類的引用致使沒法被回收框架

  • 解決方案:學習

    1. 將該線程類類改成靜態類(靜態類默認不持有外部的引用)
    2. 當外部類結束生命週期時強制結束線程

2.集合類

  • 緣由:集合類添加元素以後持有集合元素的引用,致使該集合元素不可被回收,致使內存泄漏

  • 解決方案:

    1. 集合類使用完元素對象後,必須將該元素從集合中刪除(因爲一個集合中有多個元素,因此最簡單的方案就是清空集合對象(clean)&設置爲Null)

3.資源對象使用後未關閉

  • 緣由:資源對象使用後未關閉,在Activity/Fragemnt銷燬時沒有關閉/註銷這些資源,將致使沒法回收 例如:廣播BraodcastReceiver文件流Fire圖片資源Bitmap數據庫遊標

  • 解決方案:

    1. Activity銷燬時及時關閉/註銷資源

4.Static關鍵字修飾成員變量

  • 緣由:Static關鍵字修飾成員變量的生命週期 = 應用的生命週期 例如 private static Context mContext = context 那麼context上下文對應的Activity則沒法被回收

  • 解決方案:

    1. 儘可能不要使用Static成員變量引用,使用弱引用代替強引用
    2. 使用單例模式

4.其餘使用

  • 緣由1:Context:當擁有Activity context的引用的對象仍在使用,則該Activity須要銷燬時沒法回收

  • 解決方案:

    1. context的引用不要超過它的生命週期
    2. 使用ApplicationContext代替
  • 緣由2:WebView:再也不使用WebView對象後沒有及時銷燬,致使內存佔用

  • 解決方案:

    1. 經過多線程對再也不使用的WebView對象進行銷燬
  • 緣由3:Adapter:滑動ListView、RecycleView獲取新View時 都在getView()中從新實例化一個View對象,浪費資源,使內存佔用愈來愈大

  • 解決方案:

    1. 使用緩存的convertView
    2. 直接使用ViewHolder

要如何成爲Android架構師?

搭建本身的知識框架,全面提高本身的技術體系,而且往底層源碼方向深刻鑽研。
大多數技術人喜歡用思惟腦圖來構建本身的知識體系,一目瞭然。這裏給你們分享一份大廠主流的Android架構師技術體系,能夠用來搭建本身的知識框架,或者查漏補缺;

對應這份技術大綱,我也整理了一套Android高級架構師完整系列的視頻教程,主要針對3-5年Android開發經驗以上,須要往高級架構師層次學習提高的同窗,在這裏點擊GitHub免費分享,但願能幫你突破瓶頸,跳槽進大廠;

最後我必須強調幾點:

1.搭建知識框架可不是說你整理好要學習的知識順序,而後看一遍理解了能複製粘貼就夠了,大多都是須要你本身讀懂源碼和原理,能本身手寫出來的。
2.學習的時候你必定要多看多練幾遍,把知識才吃透,還要記筆記,這些很重要! 最後你達到什麼水平取決你消化了多少知識
3.最終你的知識框架應該是一個完善的,兼顧廣度和深度的技術體系。而後通過屢次項目實戰積累經驗,你才能達到高級架構師的層次。

你只須要按照在這個大的框架去填充本身,年薪40W必定不是終點,技術無止境

相關文章
相關標籤/搜索