開(kāi)新版本啦,老版本寫(xiě)的內(nèi)容太多了,我自己找起來(lái)都麻煩了,遂決定像代碼一樣,文章臃腫了就要抽象封裝了,相近內(nèi)容程提煉成一篇匯總性的文章,然后我們?cè)偌狱c(diǎn)設(shè)計(jì)模式上來(lái),提供一個(gè)單例的全局入口,方便使用定位。程序員最好把程序思維帶到生活里來(lái),這樣有助于我們消化提煉程序思維
手淘App - Atlas
微信 - Mars
架構(gòu)
架構(gòu)方面的資料很多,這個(gè)結(jié)合設(shè)計(jì)模式提了各種開(kāi)源庫(kù):Android進(jìn)階之旅-系統(tǒng)架構(gòu)
老版本
Android 的點(diǎn)太多了,大的、小的,新的、舊的,總是目不暇接,總結(jié)整理下也好自己查好。話(huà)說(shuō)自己寫(xiě)的文章過(guò)百了,也不怎么好找了,哈哈,雖然寫(xiě)的不咋地,沒(méi)人看......
里面有不少半成品,開(kāi)了好多坑都沒(méi)天上,大家見(jiàn)諒......
常用占坑:
日常大圖鞭策自己,還有如此多的內(nèi)容呢

content 啟動(dòng)特性圖:

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