Android 學習深入之路(應用層)
本人根據個人經驗和同事討論得出的一些看法,本著由淺入深,循循漸進的原則,陳述下Android學習的流程和要掌握的知識點。供Android
應用層和Framework層初學者以及初級工程師做相關參考。如有不對之處,敬請指出。
-------------------
總結:
先概括總結下,我目前把相關知識主要分如下5塊。
- 常用基本知識;
- 常用架構;
- 效能優化方法;
- ANR處理方法;
- 設計模式。
----------------------------------------
詳細說明:
下文是逐步要掌握的內容,排列順序大致代表了學習順序,也是面試中較常遇到的問題。
基本的知識
- android四大元件:activity, broadcastReceiver, service,content Provider.
- Activity 生命週期,Activity間資料傳輸以及activity四種啟動模式。
-
常見佈局方式:linearLayout,相對佈局,幀佈局,表格佈局,絕對佈局。
-
螢幕適配常用方法:
a. 善用wrap_content,weight.
b. 使用相對佈局,
c. 使用large等尺寸限定符,
d. .9.png自動拉伸圖。 -
service啟動方式和用途,傾向於後臺執行操作。startService或bindService(呼叫者退出,服務也會停止)。
- 五種資料儲存方式:sharePreference,檔案儲存(FileInputStream,大量資料,如文字,圖片,音訊),SQLite, ContentProvider(共享資料),網路儲存。
-
listview 優化方法:
a. 在getView函式中的引數有個convertView用此物件來複用view;
b. 重新建一個靜態內部類,裡面的元件和view中的一致,讓view中的元件隨著view的複用而複用;
c. 分批載入和分頁。 -
程式和執行緒區別,通訊方式等。
a. 執行緒間通訊:
i. 共享記憶體(變數);
ii. 檔案和資料庫;
iii. handler;
iv. java中的wait, notify。
b. 程式間通訊(利用四大元件,服務即是AIDL)。 - 幀動畫,補間動畫以及屬性動畫的差別。
-
定時器實現方式: a. TimerTask,
b. handler:
c. AlarmManager: - Handler 和 MessageQueue,handler 優化方案。
-
程式重要程度:前臺,可視,服務,後臺,空程式。
在瞭解了上面所說的這些東西后,基本上就瞭解了Android的基本知識點,對於應用層的需求基本可以通過拼湊程式碼實現了。這也是培訓機構最容易做到的事情,但是在做一段時間後,必然會有一個從追求功能實現到開發效率的追求到效能優化的過程轉變,同時也會碰到寫問題需要你對底層程式碼流程和邏輯有所涉獵。
常用框架
Android 發展到現在可以說已經有很多成熟的框架了,利用這些框架可以大大節省我們的時間,這點對應用開發人員會有所幫助。
- Android 快速開發開源框架:http://blog.csdn.net/feiduclear_up/article/details/42740989。這幾種框架大多封裝了與網路,資料庫,圖片處理相關類
- Android常用網路框架:https://segmentfault.com/a/1190000008629146。
效能優化
關於效能優化,包括以下四點(可參考:https://www.kancloud.cn/kancloud/android-performance/53237):
a. 渲染(佈局);避免重複繪製,繪製時只繪製需要繪製的地方。
b. 運算:
c. 記憶體;
i. 產生原因和優化方法;
ii. 分析工具: mat, LeakCanary;
d. 電量;
另外記憶體溢位和記憶體洩漏之間的關係也要有所瞭解。
ANR
程式稍微複雜,開幾個執行緒就容易碰到ANR問題,ANR三種型別:
a. 按鍵或觸控事件超時(5s,主要型別)
b. 廣播10s內未處理;
c. 服務20s內(小概率型別)
至於怎麼處理,我現在也只是半吊子,真是尷尬啊!。。
設計模式
從設計程式碼和閱讀他人程式碼的角度上,設計出通俗易懂,易於修改的程式碼是非常重要的,這對於後期維護來說是件大有裨益的事情。另外瞭解一些常見的設計模式(如單例模式、觀察者模式……)對我們閱讀他人程式碼也會很有幫助。再次推薦大家閱讀《Head first設計模式》。
至於其他的東西多多益善,大家可以通過檢視相關崗位招聘要求有針對的去深入瞭解。
相關文章
- Android開發學習之路Android
- Laravel深入學習5 – 應用架構Laravel應用架構
- Android開發學習之路03Android
- Flutter Android 工程結構及應用層編譯原始碼深入分析FlutterAndroid編譯原始碼
- android學習-應用結構-AndroidManifest.xmlAndroidXML
- 深入學習和理解Django檢視層:處理請求與響應Django
- 前端學習之路之SPA(單頁應用)設計原理前端
- 計網期末複習-應用層
- Linux應用開發自學之路Linux
- 【機器學習】--層次聚類從初識到應用機器學習聚類
- android驅動學習入門-android應用怎麼呼叫驅動2Android
- 深入淺出webpack學習(14)–為單頁應用生成HTMLWebHTML
- OceanBase學習之路5|C 應用程式連線 OceanBase 資料庫資料庫
- OceanBase學習之路8|Java 應用程式連線 OceanBase 資料庫Java資料庫
- 【java深入學習第1章】深入探究 MyBatis-Spring 中 SqlSession 的原理與應用JavaMyBatisSpringSQLSession
- Android原始碼解析之ActivityThread,深入瞭解應用程式Android原始碼thread
- Android Compose 入門,深入底層原始碼分析Android原始碼
- 深入學習和理解Django模板層:構建動態頁面Django
- 2023 SDC 議題預告 | 深入Android可信應用漏洞挖掘Android
- Pytest學習之路
- eggjs學習之路JS
- java學習之路Java
- 機器學習&深度學習之路機器學習深度學習
- Laravel深入學習6 – 應用體系結構:解耦事件處理器Laravel解耦事件
- 深度學習的實踐變革之路 盤點TOP15的典型應用深度學習
- [PyTorch 學習筆記] 3.3 池化層、線性層和啟用函式層PyTorch筆記函式
- 深入學習 vueVue
- 深入學習SpringMVCSpringMVC
- 深入學習synchronizedsynchronized
- 深度學習及深度強化學習應用深度學習強化學習
- 來聊聊 應用層
- 應用層協議協議
- 信安學習之路
- web前端學習之路Web前端
- 凡人學習Linux之路Linux
- Python 學習之路(下)Python
- go學習之路 --- 起步Go
- 付費學習之路
- 產品學習之路