說下個人經歷吧。湖南大學畢業,學的是軟件工程,那時候比較貪玩,專業知識學的不是很紮實,畢業後就在長沙本地找了家互聯網公司工做了。
到今年六月份的話恰好畢業了五年了,同期和我一塊兒出來的同窗們,大多都已是項目經理了,至少也是個項目組長了,而我仍是個普通的程序員,日復一日的敲着代碼。
年初爆發了新冠疫情,居家隔離。市場經濟也進入了寒冬,大批的企業都是風雨飄搖,也包括個人公司。這時,我才意識到。進大廠,是多麼的重要。android
內存泄漏即 ML (Memory Leak)
指 程序在申請內存後,當該內存不需再使用 但 卻沒法被釋放 & 歸還給 程序的現象git
內存泄漏的緣由歸根到底就是當須要被回收變量的內存被其餘變量引用持有,致使內存回收失敗程序員
常見的緣由有:github
緣由1:非靜態內部類/匿名類 Handler
持有外部的Activity/Fragment
對象的引用,致使Activity/Fragemnt
被銷燬的時候沒有被回收數據庫
解決方案:緩存
WeakReference
)持有Activity
引用(靜態類默認不持有外部的引用)Activity/Fragment
)結束生命週期時,清空Handler隊列緣由2:非靜態內部類的實例(對象)
= 靜態實例
(其生命週期 = 應用的生命週期)多線程
解決方案:架構
緣由3:多線程 工做線程正在處理任務時外部類須要銷燬,此時工做線程持有外部類的引用致使沒法被回收框架
解決方案:學習
緣由:集合類添加元素以後持有集合元素的引用,致使該集合元素不可被回收,致使內存泄漏
解決方案:
緣由:資源對象使用後未關閉,在Activity/Fragemnt銷燬時沒有關閉/註銷這些資源,將致使沒法回收 例如:廣播BraodcastReceiver
、文件流Fire
、圖片資源Bitmap
、數據庫遊標
等
解決方案:
Activity
銷燬時及時關閉/註銷資源緣由:Static關鍵字修飾成員變量的生命週期 = 應用的生命週期 例如 private static Context mContext = context
那麼context上下文對應的Activity
則沒法被回收
解決方案:
緣由1:Context:當擁有Activity context
的引用的對象仍在使用,則該Activity
須要銷燬時沒法回收
解決方案:
context
的引用不要超過它的生命週期ApplicationContext
代替緣由2:WebView:再也不使用WebView對象後沒有及時銷燬,致使內存佔用
解決方案:
WebView
對象進行銷燬緣由3:Adapter:滑動ListView、RecycleView獲取新View時 都在getView()中從新實例化一個View對象,浪費資源,使內存佔用愈來愈大
解決方案:
convertView
ViewHolder
搭建本身的知識框架,全面提高本身的技術體系,而且往底層源碼方向深刻鑽研。
大多數技術人喜歡用思惟腦圖來構建本身的知識體系,一目瞭然。這裏給你們分享一份大廠主流的Android架構師技術體系,能夠用來搭建本身的知識框架,或者查漏補缺;
對應這份技術大綱,我也整理了一套Android高級架構師完整系列的視頻教程,主要針對3-5年Android開發經驗以上,須要往高級架構師層次學習提高的同窗,在這裏點擊GitHub免費分享,但願能幫你突破瓶頸,跳槽進大廠;
最後我必須強調幾點:
1.搭建知識框架可不是說你整理好要學習的知識順序,而後看一遍理解了能複製粘貼就夠了,大多都是須要你本身讀懂源碼和原理,能本身手寫出來的。
2.學習的時候你必定要多看多練幾遍,把知識才吃透,還要記筆記,這些很重要! 最後你達到什麼水平取決你消化了多少知識
3.最終你的知識框架應該是一個完善的,兼顧廣度和深度的技術體系。而後通過屢次項目實戰積累經驗,你才能達到高級架構師的層次。
你只須要按照在這個大的框架去填充本身,年薪40W必定不是終點,技術無止境