開新版本啦,老版本寫的內容太多了,我自己找起來都麻煩了,遂決定像代碼一樣,文章臃腫了就要抽象封裝了,相近內容程提煉成一篇匯總性的文章,然后我們再加點設計模式上來,提供一個單例的全局入口,方便使用定位。程序員最好把程序思維帶到生活里來,這樣有助于我們消化提煉程序思維
手淘App - Atlas
微信 - Mars
架構
架構方面的資料很多,這個結合設計模式提了各種開源庫:Android進階之旅-系統架構
老版本
Android 的點太多了,大的、小的,新的、舊的,總是目不暇接,總結整理下也好自己查好。話說自己寫的文章過百了,也不怎么好找了,哈哈,雖然寫的不咋地,沒人看......
里面有不少半成品,開了好多坑都沒天上,大家見諒......
常用占坑:
日常大圖鞭策自己,還有如此多的內容呢
content 啟動特性圖:
- 數字1:啟動Activity在這些類中是可以的,但是需要創建一個新的task,一般情況不推薦;
- 數字2:在這些類中去layout inflate是合法的,但是會使用系統默認的主題樣式,如果你自定義了某些樣式可能不會被使用;
- 數字3:在Receiver為null時允許,在4.2或以上的版本中,用于獲取黏性廣播的當前值
java 基礎
-
雜七雜八的:
-
設計模式:
-
多線程:
- android 多線程 — 綜述
- android 多線程 — java 內存模型
- android 多線程 — GC
- android 多線程 — Thread
- android 多線程 —上下文切換
- android 多線程 — 同步
- android 多線程 — reentrantLock 重入鎖
- android 多線程 — 并發集合 CopyOnWriteArrayList、ConcurrentHashMap
- android 多線程 — handle 學習
- android 多線程 — HandlerThread
- android 多線程 — IntentService
- android 多線程 — AsyncTask 使用
- android 多線程 — AsyncTask 源碼簡單分析
- android 多線程 — 線程的面試題和答案
Kotlin
原來這里有一大堆話,但是寫的有點多,提出來寫了一篇
* kotlin - 概述
* kotlin - 基礎語法
* kotlin - 函數(對象函數/代碼補全)
* kotlin - 高級特性
* kotlin - Coroutine 協程
* kotlin - 代碼片段
Android 基礎
Android 的小塊的知識點是太多,太復雜了,平時必須多加記錄,整理才能玩的轉 Android ,要不有時你會不自然的萌逼一下的,哇哈哈哈....我就長長這樣,狗屎吃過了,自然知道改了。
掃盲篇都是一些基礎的生僻知識點:
- Android 掃盲 - 常用abd命令
- Android 掃盲 - MAC 上的各種配置
- Android 掃盲 - 多語言適配
- Android 掃盲 - android設備 id
- Android 掃盲 - 軟鍵盤交互
- Android 掃盲 - android 字符串格式化
- Android 掃盲 - action
- Android 掃盲 - shape
- Android 掃盲 - LayoutInflater
- Android 掃盲 - Theme 主題
- Android 掃盲 - 5.0 蛋疼的陰影
- support兼容包:從v4、v7、v13、v17到androidX
梳理篇:
有的點實在太討厭,零零碎碎的點總是很多,一次又學不完,搞不清所有,只能靠水磨工夫去學個圓滿
Activity:
Activity 是我們接觸最多的了,下面這篇對 Activity 聲明周期變化,launchMode,configChanges ,傳參都有比較好的解釋
關于 ActivityTask 棧,建議大家去看《android 開發藝術探索》,這里面介紹的最正確
Android 疑難雜癥處理
android 開發中總是會碰到一些很難解決的疑難雜癥,很頑強,很難根治,大多數時候迪歐不知道為什么。
Android Framework
Android 框架層很難看,尤其是系統邏輯晦澀難懂,但是面試,筆試時肯定會碰到,尤其像 launch Activity ,activty 顯示流程是必會的,涉及到 AMS,WMS,雙向AIDL通訊,window,windowManage,viewRootImpl,N多復雜的過程
推薦大家看 CSDN:kc專欄 的文章,里面涉及很多內容,需要的一般都有,尤其是 android 顯示 Surface 這塊,分析的很深入,值得學習
Android 進階篇
-
屏幕適配
屏幕適配在 18年 10 頭條公布自己的適配方案后,一時又是火熱,自身大牛們紛紛跟著起哄,引的我們有趣學習一波,下面是我的學習心得,第一篇早期文章: -
組件間通信
這里有一篇文章挺全的,基本思路都在,雖說不是我寫的 -
綜合技術文章
這類文章里面有大量的各類技術文章,一般質量都是上乘的,但是不好分類啊,我就放這里得了
- 自定義 view
-
事件分發,滑動沖突
-
權限
-
server 、ALDL
-
廣播
-
混合開發
-
Flutter
我的開源庫
在組件化,平臺化的今天,我們被要求同一個功能可以在多個 app 項目中復用,這就要求我們必須對功能進行框架級別的封裝,也就是把 app 中的一個個包 變成一個活多個 module 組件。這立馬就要求開發人員要有至少水平線的代碼封裝,框架封裝能力,封裝封裝,這真不是說說的,真的是一下子對 android 開發的功底要求就高了起來了,沒有相關經驗基礎的同學真的會無所適從啊,我是深有體會啊,這里分享下自己封裝的一些簡單的功能組件,算是給大家提供一個思路吧,因為我知道我自己也是個半拉子水平
隨著時間的推移,我找到了一些管理如何開發第三方庫的指導,都是別人思慮很久后形成的文字,很值得大家沒事去看看
-
applicappation 組件
-
權限組件
-
RxBus 庫
UI
Android 的 UI 可不僅僅是狹隘的控件,布局,更是涉及到產品設計的思想,app 開發人員為啥不能去了解產品設計,UI 設計,這些了解了才能優雅,恰當的和 UI 貓,產品汪去溝通,鄙視這些小動物,要不你都不知道怎去噴...........看我的怨念......
-
UI 設計方向
-
從 Android 開發看 UI 設計
原子設計模式,這基本可是 UI 界的通行標準了,但是在 app 界還是太多的 UI 設計不懂了,我們了解之后才好去和 UI 噴。 - 開發人員的看的產品設計/運營
-
從 Android 開發看 UI 設計
-
圖片
-
在學習圖片之前,我們要先了解一下圖片儲存的位置:
- 在Android3.0之前,Bitmap對象放在java堆中,具體的像素數據放在Native中,這樣做OOM的幾率小了,但在圖片回收的時候,不一定能及時釋放Native內存中的圖片像素數據
- 于是在Android3.0~Android7.0期間,將Bitmap 對象和像素數據統一放到 Java 堆中.這樣做資源是能及時回收了,但是OOM的問題又出現了
- Android8.0系統又覺得將Bitmap像素數據放回到Native中,只是這時多了一個NativeAllocationRegistry來幫助Native內存的回收
NativeAllocationRegistry 是 Android 8.0引入的一種輔助自動回收native內存的一種機制,當Java對象因為GC被回收后,NativeAllocationRegistry可以輔助回收Java對象所申請的native內存
android:largeHeap="true" 申請大內存
-
-
動畫
-
Behavior
-
layout 布局
-
ViewPager
recycleView
SnapHelper 有兩個實現: LinearSnapHelper , PagerSnapHelper。區別是 LinearSnapHelper 一次可以滑多個 item ,PagerSnapHelper 一次只能滑一個 item
LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);
- 我的recycleView技術大全
- RecyclerView — 滾動基礎
- RecyclerView — BaseAdapter、BaseViewHolder
- item動畫效果
- LayoutAnimation 動畫
- RecyclerView — DiffUtil
- RecyclerView — ItemDecoration
- Textview
textview 我們雖然用起來很簡單,有很多有太多變種應用了,這里正確一一列舉出來,里面涉及到大量的自定義 view,canvas 繪制,動畫內容,但是每個部分難度不是太大,特別適合入門學習- 特別推薦一個庫:SuperTextView
對 textview 封非常好的一個庫,尤其是其包含 shape 功能,可以讓我們省下定義大量 shape xml 文件的苦楚,大家看一個圖片就知這個庫有多厲害了,非常值得去看的
image - textview - drawableXXX 設置大小
- textview - SpannableString 文本的花式玩法
- textview - SpannableString 小工具
- textview - 翻轉動畫
- textview - 點擊陰影縮放動畫
- textview - 仿支付寶微信支付密碼輸入控件
- 特別推薦一個庫:SuperTextView
開源庫
-
圖片加載庫
-
Rxjava
- DataBinding
- 音視頻開發
- Vitamio 播放器
Vitamio 支持 RTMP/RTSP/FLV/HLS(m3u8)/MMS
RTMP 是早期 flash 的,RTSP 系統自帶的 VideoView 就能支持,HLS 是基于 http/https 的,MMS 適用于電臺,網絡廣播
Vitamio.initialize(this)
mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
path = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov";
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
}
});
- 餃子播放器
- 音頻錄制
-
AudioRecord 錄制詳解
這篇文章非常詳細的講解了音頻錄制和播放的內容,非常值得學習
app 架構
Android 的架構不是一成不變的,發展也是很快的。最近出了很多架構思想,無論是最初的MVC, 還是近幾年風頭極盛的MVP, Google推出的MVVM,還是系統層面的組件化,模塊化,插件化;最終遵循的架構原則無非就是三點:
- 橫向劃分模塊
- 縱向劃分層次
- 解耦通信
代碼架構最終實現目的是什么?
- 解耦
- 復用
- 可讀性
- 健壯性
- 提高并行開發效率
移動架構分廣義和狹義,光以上講是劃分子系統,狹義上講是代碼分層。
所謂架構,無非兩個方面: 分層和通信方式。
想對架構有個總體了解,推薦大家看 DevCW 寫的這 3 篇文章:
- mvp 和 mvvm 基礎請看下面:
大家對于 clean 架構可能不是很清晰,大家看這里,這里有比較詳細的 mvc.mvp.clean.aac 對比
-
app 架構
-
Android Architecture Components 開發架構
基于數據流的響應式架構
-
Android Architecture Components 開發架構
-
從 MVP學習代碼封裝系列
-
android 開發規范系列
優化
Android 的優化的點很多的,UI,架構,框架性能,持續集成能力,平臺化能力,是否易于修改,是否易于擴展....所以做好 Android 的優化,我們首先要了解很多偏底層的知識點,這些知識點也是很零碎的
優化的前提至少我們得知道 android 是怎么顯示的不是,CPU 把 UI 組件計算成 Polygons 多邊形 和 Texture 紋理,然后交給 GPU 進行柵格化渲染
-
須知知識點
-
性能分析工具
- android性能跟蹤分析工具系列 - 目錄
- android性能跟蹤分析工具系列 - 各種理論簡介
- android性能跟蹤分析工具系列 - GPU 呈現模式分析
- android性能跟蹤分析工具系列 - Hierarchy Viewer
- android性能跟蹤分析工具系列 - systrace
- android性能跟蹤分析工具系列 - TraceView
- android性能跟蹤分析工具系列 - Memory monitor - jump java heap
- android性能跟蹤分析工具系列 - LeakCanary
- android性能跟蹤分析工具系列 - blockcanary - 1
- android性能跟蹤分析工具系列 - blockcanary - 2
- android性能跟蹤分析工具系列 - StallBuster
持續集成 、 組件化,平臺化
16年時的插件化,組件化,熱修復是多火,很多人其實對其發展歷史不是很了解,有興趣的朋友看這篇,大牛寫的
這篇文章是從前端角度來說的,我喜歡期中的思想,這是阿里的分享,包括 Code Review ,狀態(包含數據和變化)這個詞, 還有 CR 的思路,流程,內部間 CR 的協作,組織,很贊
-
AS 工具
- Android 尋找極限編碼的快感
- 開發小工具合集
- 熟悉,使用 Android Studio 工具
- gradle 系列 - 目錄
- gradle 系列 (1) - 基礎知識
- 修改 gradle 文件卡頓
- Kotlin 里面如何配置 DataBinding
- 關于AS 自動更新 gradle 文件出現問題
- 使用AS - Live Template 添加代碼模板
- 使用AS - File Template 添加class模板
- Android studio XML布局不能格式化
- 值得一試的Android開發工具一「網絡請求專場」
- 值得一試的Android開發工具二「AndroidStudio插件專場」
- 值得一試的Android開發工具三「筆記類專場」
- Android Studio - 有意思的快捷鍵
- Android Studio - Postfix Completion 代碼補全
通用技術和開發工具支持
資源
- Google IO 2018 小計
- 2017北京GDG觀后感 - 附視頻資源
- android練手項目集錦
- 設計資源
- android大神們的博客,網站還有各種優質資源
- 大廠的 android app 進化之路及各種優化,瘦身
感悟
Android 學習,工作的過程中總是有很多感受,感悟,甚至是恍然大悟,這些瞬間的感覺總是一閃而逝,保存不久,無法記憶,所以我希望用文字盡量多的保留那份感悟,以待之后可以常悟常新。還有很多別人的感悟,經驗,這些放在一起。
-
周盤:
-
漲 IQ :
面試
- 面試資料準備
- 新智認為面試
-
為跳槽的你獻計獻策(Android)
簡歷模板不錯 - qing的世界的面試算法,有4篇,講的比較深了
- Android(2017-2018)BAT面試題整理(java篇,含答案)
第三方集成經驗
android 中處理 carsh 使用 Thread.UncaughtExceptionHandler 來截獲錯誤并進行自己的邏輯處理
public class CrashHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
//回調函數,處理異常出現后的情況
}
}
我們在里面可以重啟 app 或是打印錯誤信息到本地,詳細: