Android學習指南

目錄

    • 核心分析內容
    • 1、學什么
      • 1.1、Android基礎 & 常用
      • 1.2、Android進階
      • 1.3、與時俱進、熱門技術
      • 1.4、編程語言:Java與Java虛擬機
      • 1.5、計算機基礎
      • 1.6、總結
    • 2、怎么學
      • 2.1、學習路徑:如何循序漸進、階段性的學習Android的理論知識?
      • 2.2、獲取途徑:有哪些高效的方式獲取Android理論知識?
      • 2.3、學習方式:用什么方式記錄?
      • 2.4、總結
    • 3、怎么應用Android知識?
      • 3.1、該如何尋找項目?
      • 3.2、如何將理論知識運用到項目中 & 提高項目的質量
    • 具體執行建議
    • 總結

核心分析內容

對于怎么學習Android,主要解決的是3個問題:學什么怎么學 & 怎么用

具體如下:
在這里插入圖片描述
下面,我將帶著上述幾個問題,詳細講解自身學習Android的方法和Android學習路徑。最后,還會結合前面內容,給出綜合的具體執行學習Android的建議。

1、學什么

面向Android初、中級開發者,對于要學習的Android理論知識,我認為主要包括:

  • Android基礎 & 常用
  • Android進階
  • 與時俱進、熱門技術
  • 編程語言
  • 計算機基礎

具體介紹如下:

1.1、Android基礎 & 常用

針對Android基礎&常用知識,按照優先級最主要的知識點主要包括:四大組件布局使用多線程 & 動畫

具體介紹如下:

類型簡介具體內容
四大組件Android最基礎、最常用的四個組件? 活動(Activity)
? 廣播(Broadcast)
? 內容提供者(ContentProvider)
? 服務(Service)
布局使用常用UI布局組件? 框架布局(FrameLayout)
? 線性布局(LinearLayout)
? 絕對布局(AbsoluteLayout)
? 相對布局(RelativeLayout)
? 表格布局(TableLayout)
? 約束布局(ConstraintLayout)
多線程多線程操作、異步通信? Thread、Runnable
? Handler
? AsyncTask
? IntentService
? HandlerThread
動畫實現UI中的動畫效果? 補間動畫
? 屬性動畫
? 幀動畫
? 差值器 & 估值器

1.2、Android進階

針對Android進階知識,按照優先級最主要的知識點主要包括:自定義View性能優化

具體介紹如下:

類型簡介具體內容
自定義View自定義試圖組件 & 動畫? 自定義View流程(measure、layout、draw)
? 時間分發機制
? 自定義動畫 & 組件
性能優化性能優化的目的是為了讓應用程序App更快、更穩定 & 更省電? 內存優化
? 內存泄漏
? 繪制優化
? 布局優化

1.3、與時俱進、熱門技術

除了基礎日常使用的Android知識,我們還需時刻關注行業動態,與時俱進的學習新技術,如近些年來較為熱門的Android新興技術包括:Flutter熱修復插件化 等;

同時,了解 & 學習常用的開源庫也十分重要,常用的開源庫主要包括 圖片加載網絡請求異步處理 的開源庫。

具體類型如下:

類型簡介具體內容
圖片加載加載顯示圖片? glide
? fresco
? picasso
? Android-Universal-Image-Loader
網絡請求與服務器快速實現網絡請求? Retrofit
? okhttp
? volley
異步處理快速實現異步通信、響應式編程? RxJava
? RxAndroid
? RxBinding
? EventBus

1.4、編程語言:Java與Java虛擬機

Android是基于Java的,所以學習Java和Java虛擬機(JVM)十分重要。

學習Java不需要類似后端那么深入,我認為作為Android開發者,學習的內容包括:語言特性基礎使用集合類機制

具體介紹如下:

類型簡介具體內容
語言特性Java特有的語法特性? 面向對象的3個特征與含義
? 多態的實現原理
? 基本數據類型、相關操作和封裝類
? 4種引用:強、軟、弱、虛 & 應用場景
基礎使用Java常見的使用類/方法? 基本數據類型、相關操作和封裝類
? Object類、String類、抽象類(Abstract)
? Static關鍵字
? 接口(Interface)
集合類Java中與集合相關的類 & 使用? Collection類、Arrays類
? List、Set、Queue、Stack、Map的特點與用法
? Vector、ArrayList、LinkedList的存儲特性 & 區別
? Map相關:HashMap、LinkedHashMap、TreeMap、HashTable、ConcurrentHashMap
機制Java特定機制的使用? 多線程:Thread與Runnable、ThreadLocal、線程池ThreadPool
? 線程同步:sychronized、同步鎖(sychronized)
? 反射
? JNI
? IO與NIO
? 泛型

對于Java虛擬機(JVM),屬于底層 & 原理性的內容,具體介紹 & 學習的內容包括:
在這里插入圖片描述

1.5、計算機基礎

除了學習Android特定技術外,對于程序員來說,最基本的計算機基礎素養也十分重要的,主要包括 數據結構算法計算機網絡

具體介紹如下:

類型簡介具體內容
數據結構相互之間存在一種或多種關系的數據元素的集合? 線性表&特殊線性表(棧和隊列)
? 樹、二叉樹
? 串、字符串
? 圖
? 查找
? 排序
算法解決特定問題的求解步驟對應每種數據結構的多種常見算法
計算機網絡網絡通信相關? 計算機網絡體系結構(5層 & 7層)
? TCP / IP協議、UDP協議
? HTTP協議
? Socket

1.6、總結

至此,關于入門Andriod需學習的內容講解完畢,總結如下:

在這里插入圖片描述

2、怎么學

對于怎么學習Android知識,此處分為3個子問題:

  • 學習路徑:如何循序漸進、階段性的學習Android的理論知識?
  • 獲取途徑:有哪些高效的方式獲取Android理論知識?
  • 學習方式:用什么方式記錄?怎么樣去記錄?

下面將具體介紹:

2.1、學習路徑:如何循序漸進、階段性的學習Android的理論知識?

  • 既然已經知道要學習哪些內容了,下面,該解決的是:學習路徑,即什么階段該學習什么內容
  • 對于Android知識學習階段,我認為是和Android開發水平相結合的,只要掌握了哪部分知識,就代表你處于Android開發的哪個階段。
  • 我將Android開發水平分為:初、中、高 & 高級以上

具體對應的知識內容如下:

類型定義知識 & 能力范疇特點具體內容
初級最基礎的Android知識? 定性認識:知識的了解
? 定量使用:知識的實際使用
? 基礎
? 廣度
? Android基礎使用(如四大組件)
? Android常見機制(如多線程、動畫等)
? Java
? 編程通用:數據結構、算法、網絡
中級基礎學習中更深一步的探索? 高級應用
? 源碼分析
? 新技術的使用
? 深度
? 與時俱進
? 底層工作機制的原理
? 自定義View
? 性能優化
? 熱定技術:開源庫、熱修復、插件化
高級專注于某一垂直領域(如音視頻、性能優化)特定領域的知識深入? 某一垂直領域
? 機具深度 & 門檻
專注解決特定領域的技術問題
高級以上技術專家繼續深入研究特定領域更加深入某一垂直領域? 專注解決特定領域的技術問題
? 會產出 & 開源庫 & 組件
高級以上架構師在更高的層面解決項目難點 / 業務問題專注于整體技術架構? 技術架構設計
? 具體業務的解決方案
高級以上管理層面向團隊、業務 & 產品具備管理團隊、統籌產品方向的屬性? 管理能力
? 業務能力
? 產品能力

2.2、獲取途徑:有哪些高效的方式獲取Android理論知識?

既然已經知道要學習哪些內容了,下面,我將列舉一些學習這些理論知識的有效途徑。

對于獲取Android知識,我認為最有效的途徑是:書籍 > 視頻 > 技術博客 > 公眾號

具體介紹如下:

類型特點應用場景推薦
書籍具備完整知識體系、講解全面的獲取知識途徑成知識體系、循序漸進的學習? Android:《第二行代碼》、《Android開發藝術探索》
? Java:《Java編程思想》
? JVM:《深入理解Java虛擬機》
? 數據結構:《大話數據結構》
? 算法:《劍指Offer》、Leetcode網站刷題
? 計算機網絡:《計算機網絡》(第五版)
視頻? 更加生動、清晰的講解知識 & 實踐
? 較大的缺點:耗費時間較長
學習難度較高的知識在線學習網站對應的Android學習課程(極客學院 & 慕課網)
技術博客針對某個知識點進行講解目的性搜索、深入學習? 技術社區:CSDN、稀土掘金、簡書
公眾號針對某個知識點進行講解(由于鑲嵌在微信,所以容易鏈接到外部更多的渠道)適合碎片化學習Android公眾號

關于通過公眾號的學習,本人的微信公眾號:carson帶你解析Android,希望能讓大家系統的學習上述說的Android理論知識。

2.3、學習方式:用什么方式記錄?

很多人看完書籍看完博客后當時很理解,但過一段時間就十分容易忘記。

所謂“好記性不如爛筆頭”,我認為,最好的記錄方式就是將學習到的知識記錄下來,我強烈推薦:撰寫技術博客。

對于技術博客的介紹如下:
在這里插入圖片描述
撰寫技術博客好處多多,主要包括:

好處具體描述
提高開發效率? 復雜使用的流程化:記錄下繁雜的使用流程,下次再次使用時按部就班直接復用即可,常見的有:開源庫的使用、某類需求的具體實現過程
? Bug的快速解決:記錄下問題發生的場景 & 解決方案,不僅能避免重復采坑,就算采坑了也能快速解決
保證真正的掌握知識? 只有做到以下3步我才認為是真正掌握了知識:敲代碼實現、清晰表達 & 讓別人聽懂
? 但大部分開發者都停留在第一步(敲代碼實現),你得清楚明白:敲代碼實現 & 用語言表達出來是兩碼事
? 所以在整個過程中是非常能鍛煉自己的思維能力 & 表達能力
加深對知識的思考? 在寫作過程中,你會不斷思考知識的各個方面
為什么?因為如果思考的廣度 & 深度不夠,文章是沒法繼續寫下去的
? 這大概也是很多人沒法堅持下來的原因:因為牽一發而動全身,知識總是從1個點擴散到整個面的,最終需完成的文章內容遠遠超出你的想象
保證知識的正確性? 自己的認知能力有限,所以對知識的理解總有偏差
? 當分享出來博客后,良好的Android技術社區氛圍能及時糾正你錯誤的理解,保證你的認知是正確的

當然,還有一些其他福利,如:

好處具體描述
提供影響力當大量產出優質文章后,在Android領域的知名度 & 影響力就會提高、對自己在職場上的地位會有所幫助,這是一種莫大的榮譽感
結識人脈相對其他職業來說,程序猿較為封閉,即對電腦多、面向人較少;通過博客、Github等這些公開渠道,能結識更多的開發者
知識共享Android與IOS其中一個較大區別 = 開源,作為一名Android開發者,應秉著谷歌、Android開源的精神,將有用的知識分享給大家、幫助更多的Android開發者 & 共同學習,推進整個Android技術圈的進步

2.4、總結

在這里插入圖片描述

3、怎么應用Android知識?

  • 理論結合實踐、學以致用才能更好地獲取知識,對于深入理解Android,最好的實踐就是 將理論知識運用到Android項目中
  • 所以,此處可以轉化成兩個問題:
    • 該如何尋找項目?
    • 如何將理論知識運用到項目中 & 提高項目的質量

下面我將詳細回答這兩個問題

3.1、該如何尋找項目?

此處我給出3個方向:

  • 學校:課程設計、社團組織
  • 公司:實習、正職、創業
  • 技術社區:開源項目
方向具體
學校? 課程設計:請認真對待大學專業對于你職業相關課程的大作業(如Java、Android、數據結構),因為它可能會成為你一個不可多得的項目經驗
? 社團組織:多參與校內官方組織 & 社團組織,注重尋找具備校內影響力較大的產品的所屬組織,因為在那里你能找到一個具備落地實踐的開發經歷 & 一群靠譜、能在職場上給予你很多幫助的開發團隊
公司? 實習:如果你還是在校大學生,請安排好自己的大學上課時間,嘗試出去公司參與擁有大量用戶、真正的項目,特別是知名公司,對于在校大學生來說,這部分項目經歷是含金量的提高。
? 正職:如果你已經是正職員工,那么做好手頭上的項目是你實踐最好的方式。
? 創業:這是能最大程度鍛煉你全方面的能力,含:技術專業能力 & 基礎能力;但這是一個可遇不可求的機會:找到靠譜的團隊 & 有前景的方向,若有這樣的機會,個人非常建議去嘗試;假設最后能拿到投資,含金量是非常非常高、最能鍛煉人的。
技術社區? 來源:自己的項目、當前技術熱點/開源庫、仿照主流的app;
? 內容:完整App、某個功能模塊、UI組件等;
? 開源處:主流技術社區 = Github、CSDN、稀土掘金、簡書

3.2、如何將理論知識運用到項目中 & 提高項目的質量

我認為,**項目中的所有功能 & 業務實現都是基于上述說的Android知識的,關鍵是在于:**是否能選擇對的知識點 & 組合實現思路。

提高項目質量,即提高項目含金量、增加技術含量 & 亮點,下面主要是從項目**本身的意義實現方式性能優化** & 影響力 4個方面

類型具體備注
意義盡可能的讓自己的項目使用的技術往學習到的知識點靠攏
實現方式? 具備一定的技術難點 & 技術技巧,而不是簡單實現
? 如:使用了某種新技術、新的開源庫
若無難點,要學會自己去制造難點
性能優化對項目在性能上提出要求 & 提出解決方案與同類項目、一般要求的區別開來
影響力盡可能讓項目可落地 & 具備一定的用戶基數;
? 具備一定的影響力 & 知名度

具體執行建議

個人認為最高效的執行方式是:以做項目為主知識體系學習為輔將技術博客作為一種學習的方式

具體理解的是:
在這里插入圖片描述

總結

至此,關于我對Android學習內容、方向 & 具體實踐方式 講解到這里,此處作個簡單總結:
在這里插入圖片描述
憑借這樣的學習方式,有幸獲得騰訊、阿里巴巴、今日頭條等Android客戶端offer,所以,我將自己的一套Android學習方式總結出來分享給大家,希望各位也能獲得心儀的offer!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用memcmp函數判斷兩個函數的前n位字節數是否相等

memcmp函數的介紹 頭文件&#xff1a;#include <string.h>定義函數&#xff1a;int memcmp (const void *s1, const void *s2, size_t n);函數說明&#xff1a;memcmp()用來比較s1 和s2 所指的內存區間前n 個字符。字符串大小的比較是以ASCII 碼表上的順序來決定&#x…

java 選擇排序

選擇排序–時間復雜度n^2 第一次從arr[0]–arr[n-1]中選出最小值,與arr[0]交換 第二次從arr[1]–arr[n-1]中選出最小值,與arr[1]交換… 最小數:假定當前這個數是最小數,然后和后面的每個數進行比較,當發現有更小的數時,重定最小數與最小數的下標 總結: 選擇排序一共有數組大…

Linux環境下實現unsigned char*向string的轉換

代碼 unsigned char input_data[input_data_length] {"This is my first encrypted plaintext hello world"}; openssl_enc_string hsm::mgmt::aes_ecb_encrypt_to_string(static_cast<string>((const char * )input_data),password);使用static_cast<st…

概率論 事件關系 古典概型與幾何概型

基本知識點 隨機試驗:1.不確定性2.可預知性3.可重復性基本事件:包含一個樣本點 必然事件:全集 不可能事件:空集 子集2^n-1-1(減去空集與真集) 事件間的關系 1.包含關系 2.和運算AUBAB,A與B至少有一個發生 3.積事件A∩BAB,AB同時發生 4.差事件A-BAB ?A-AB,A發生但B不發生 5.…

Android代碼命名規范

目錄目錄1、為什么 規范 Android 代碼命名&#xff1f;2、Android需要命名的代碼&#xff08;對象&#xff09;有哪些&#xff1f;3、具體命名規范3.1、包3.2、類3.3、變量3.4、方法3.5、參數名3.6、資源3.6.1、布局文件資源3.6.2、圖片資源3.6.3、參數值資源3.6.4、動畫資源3.…

安卓牛客專項練習2020.12.10

安卓Activity活動 Android的Activity活動中&#xff0c;我們一般可以歸結為四種狀態: 1.運行狀態Running 2.暫停狀態Paused 3.停止狀態Stopped 4.銷毀狀態Destroyed 動畫Animation 1.補間動畫TWeen Animation 其中包括: 平移Translate Animation 透明Alpha Animation 旋轉Ro…

將結構體數據存儲到一段字符串string中

核心思想 指定一段內存空間存儲結構體數據&#xff0c;然后使用一個指針強制類型轉化為結構體類型的&#xff0c;就可以使用這個指針操作結構體相關的成員函數和變量結構體內存只會為定義的變量進行分配內存空間&#xff0c;函數只進行調用&#xff0c;不占據空間 結構體 void…

Idea中搭建Resin運行環境(Mac)

一、背景 idea中搭建Resin運行環境&#xff0c;可以在idea中通過點擊Run按鈕直接調試應用。 二、Resin下載地址 下載地址&#xff1a;https://caucho.com/products/resin/download/gpl#download 我下載的是tar.gz的&#xff0c;通過tar -zxvf命令解壓到自己mac的任意目錄下…

Java牛客專項練習2020.12.10

TreeSet subset()方法: subset(from,true,to,true),返回從from元素到to元素的一個集合,true判斷是否包含邊境元素 Java與C Java與C都有三個特征: 封裝,繼承,多態 抽象類與接口 1.抽象類可以有構造方法,但不能new;接口沒有構造方法 2.抽象類中可以有普通成員變量int x等,接…

Idea中搭建Wildfly(JBoss)運行環境(Mac)

目錄一、簡介二、下載Wildfly&#xff08;JBoss&#xff09;三、配置Idea四、調試一、簡介 首先說一下在linux環境&#xff0c;只需要將war包上傳到 wildfly-8.2.0.Final/standalone/deployments 目錄&#xff0c;然后到 wildfly-8.2.0.Final/bin 目錄下 ./standalone.sh&…

啟動linux的rpc服務的命令

命令 sudo service rc-local status

java插入排序

插入排序 思路: 把集合分成有序表與無序表,最開始有序表只有一個元素,無序表有n-1個元素,排序過程中每次取出無序表的第一個元素,然后與有序表中的元素比較,插入到適當位置 小結: 1.一共要進行n-1次排序循環 排序過程 排序前--- [101, 34, 119, 1] 第1輪插入后--- [34, 101,…

一個簡單JavaAgent的實現

一、什么是javaagent javaagent是一個JVM“插件”&#xff0c;一種專門精心制作的.jar文件&#xff0c;它能夠利用JVM提供的Instrumentation API。 1.1、概要 Java Agent由三部分組成&#xff1a;代理類、代理類元信息和JVM加載.jar和代理的機制&#xff0c;整體內容如下圖所…

Openai的openai新版本調用方式

最近大家有沒有發現Openai的openai已經更新到1.6.1了,而且API的調用方式發生了巨大的變化,下面來看看openai新的調用方式吧。 歡迎關注公眾號 module ‘openai’ has no attribute ChatCompletion. 提示openai的版本過低。(pip install -U openai) 1. Chat API from openai…

計算機系統基礎 計算機系統的基本組成與基本功能

基礎知識點 1.1946年第一臺通用電子計算機ENIAC誕生 2.馮.諾依曼結構: 組成:輸入設備,輸出設備,存儲器,運算器,控制器 3.現代計算機結構模型: 組成 CPU中央處理器 PC程序計數器 IR指令寄存器 ALU算數邏輯部件 GPRs通用寄存器組 MAR存儲器地址寄存器 MDR存儲器數據寄存器 知…

Android UI卡頓監控

一、背景 應用的使用流暢度&#xff0c;是衡量用戶體驗的重要標準之一。Android 由于機型配置和系統的不同&#xff0c;項目復雜App場景豐富&#xff0c;代碼多人參與迭代歷史較久&#xff0c;代碼可能會存在很多UI線程耗時的操作&#xff0c;實際測試時候也會偶爾發現某些業務…

linux查看內核版本信息

使用命令 uname -acat /proc/version

C語言學習:snprintf()函數

函數原型&#xff1a; int snprintf(char* dest_str,size_t size,const char* format,...);函數功能&#xff1a; 先將可變參數 “...” 按照format的格式格式化為字符串&#xff0c;然后再將其拷貝至dest_str中。 頭文件&#xff1a; #include<stdio.h>注意事項&…

物理 質點運動學

常用公式 重點 1.求軌道方程:消去時間t 2.dr---->位置矢量大小的增量 3.求方向:tanax/y 4.求位置也就是求位移rxiyj即可 習題解析 1.求運動時一定要求出加速度,變速與勻速就是看a 2.求位移時必須看X0是不是為0,如果不為0,求位移與路程時都要減去x0 3. 記住等號兩邊統一…