Android 知識整理

開新版本啦,老版本寫的內容太多了,我自己找起來都麻煩了,遂決定像代碼一樣,文章臃腫了就要抽象封裝了,相近內容程提煉成一篇匯總性的文章,然后我們再加點設計模式上來,提供一個單例的全局入口,方便使用定位。程序員最好把程序思維帶到生活里來,這樣有助于我們消化提煉程序思維

架構

架構方面的資料很多,這個結合設計模式提了各種開源庫:Android進階之旅-系統架構


老版本

Android 的點太多了,大的、小的,新的、舊的,總是目不暇接,總結整理下也好自己查好。話說自己寫的文章過百了,也不怎么好找了,哈哈,雖然寫的不咋地,沒人看......

里面有不少半成品,開了好多坑都沒天上,大家見諒......

常用占坑:

日常大圖鞭策自己,還有如此多的內容呢



content 啟動特性圖:

  • 數字1:啟動Activity在這些類中是可以的,但是需要創建一個新的task,一般情況不推薦;
  • 數字2:在這些類中去layout inflate是合法的,但是會使用系統默認的主題樣式,如果你自定義了某些樣式可能不會被使用;
  • 數字3:在Receiver為null時允許,在4.2或以上的版本中,用于獲取黏性廣播的當前值

java 基礎


Kotlin

原來這里有一大堆話,但是寫的有點多,提出來寫了一篇
* kotlin - 概述
* kotlin - 基礎語法
* kotlin - 函數(對象函數/代碼補全)
* kotlin - 高級特性
* kotlin - Coroutine 協程
* kotlin - 代碼片段


Android 基礎

Android 的小塊的知識點是太多,太復雜了,平時必須多加記錄,整理才能玩的轉 Android ,要不有時你會不自然的萌逼一下的,哇哈哈哈....我就長長這樣,狗屎吃過了,自然知道改了。

掃盲篇都是一些基礎的生僻知識點:

梳理篇:

有的點實在太討厭,零零碎碎的點總是很多,一次又學不完,搞不清所有,只能靠水磨工夫去學個圓滿


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 進階篇


我的開源庫

在組件化,平臺化的今天,我們被要求同一個功能可以在多個 app 項目中復用,這就要求我們必須對功能進行框架級別的封裝,也就是把 app 中的一個個包 變成一個活多個 module 組件。這立馬就要求開發人員要有至少水平線的代碼封裝,框架封裝能力,封裝封裝,這真不是說說的,真的是一下子對 android 開發的功底要求就高了起來了,沒有相關經驗基礎的同學真的會無所適從啊,我是深有體會啊,這里分享下自己封裝的一些簡單的功能組件,算是給大家提供一個思路吧,因為我知道我自己也是個半拉子水平

隨著時間的推移,我找到了一些管理如何開發第三方庫的指導,都是別人思慮很久后形成的文字,很值得大家沒事去看看


UI

Android 的 UI 可不僅僅是狹隘的控件,布局,更是涉及到產品設計的思想,app 開發人員為啥不能去了解產品設計,UI 設計,這些了解了才能優雅,恰當的和 UI 貓,產品汪去溝通,鄙視這些小動物,要不你都不知道怎去噴...........看我的怨念......

LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);

開源庫

  • 音視頻開發
  1. 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);
        }
    });
  1. 餃子播放器
  1. 音頻錄制

app 架構

Android 的架構不是一成不變的,發展也是很快的。最近出了很多架構思想,無論是最初的MVC, 還是近幾年風頭極盛的MVP, Google推出的MVVM,還是系統層面的組件化,模塊化,插件化;最終遵循的架構原則無非就是三點:

  1. 橫向劃分模塊
  2. 縱向劃分層次
  3. 解耦通信

代碼架構最終實現目的是什么?

  1. 解耦
  2. 復用
  3. 可讀性
  4. 健壯性
  5. 提高并行開發效率

移動架構分廣義和狹義,光以上講是劃分子系統,狹義上講是代碼分層。

所謂架構,無非兩個方面: 分層和通信方式。

想對架構有個總體了解,推薦大家看 DevCW 寫的這 3 篇文章:

大家對于 clean 架構可能不是很清晰,大家看這里,這里有比較詳細的 mvc.mvp.clean.aac 對比


優化

Android 的優化的點很多的,UI,架構,框架性能,持續集成能力,平臺化能力,是否易于修改,是否易于擴展....所以做好 Android 的優化,我們首先要了解很多偏底層的知識點,這些知識點也是很零碎的

優化的前提至少我們得知道 android 是怎么顯示的不是,CPU 把 UI 組件計算成 Polygons 多邊形 和 Texture 紋理,然后交給 GPU 進行柵格化渲染


持續集成 、 組件化,平臺化

16年時的插件化,組件化,熱修復是多火,很多人其實對其發展歷史不是很了解,有興趣的朋友看這篇,大牛寫的

這篇文章是從前端角度來說的,我喜歡期中的思想,這是阿里的分享,包括 Code Review ,狀態(包含數據和變化)這個詞, 還有 CR 的思路,流程,內部間 CR 的協作,組織,很贊


通用技術和開發工具支持


資源


感悟

Android 學習,工作的過程中總是有很多感受,感悟,甚至是恍然大悟,這些瞬間的感覺總是一閃而逝,保存不久,無法記憶,所以我希望用文字盡量多的保留那份感悟,以待之后可以常悟常新。還有很多別人的感悟,經驗,這些放在一起。


面試


第三方集成經驗


android 中處理 carsh 使用 Thread.UncaughtExceptionHandler 來截獲錯誤并進行自己的邏輯處理

public class CrashHandler implements Thread.UncaughtExceptionHandler {

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
    //回調函數,處理異常出現后的情況
    }
}

我們在里面可以重啟 app 或是打印錯誤信息到本地,詳細:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容