Android 知識(shí)整理

開(kāi)新版本啦,老版本寫(xiě)的內(nèi)容太多了,我自己找起來(lái)都麻煩了,遂決定像代碼一樣,文章臃腫了就要抽象封裝了,相近內(nèi)容程提煉成一篇匯總性的文章,然后我們?cè)偌狱c(diǎn)設(shè)計(jì)模式上來(lái),提供一個(gè)單例的全局入口,方便使用定位。程序員最好把程序思維帶到生活里來(lái),這樣有助于我們消化提煉程序思維

架構(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ǔ)


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):

梳理篇:

有的點(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 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)階篇


我的開(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)事去看看


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)物,要不你都不知道怎去噴...........看我的怨念......

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

開(kāi)源庫(kù)

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

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

代碼架構(gòu)最終實(shí)現(xiàn)目的是什么?

  1. 解耦
  2. 復(fù)用
  3. 可讀性
  4. 健壯性
  5. 提高并行開(kāi)發(fā)效率

移動(dòng)架構(gòu)分廣義和狹義,光以上講是劃分子系統(tǒng),狹義上講是代碼分層。

所謂架構(gòu),無(wú)非兩個(gè)方面: 分層和通信方式。

想對(duì)架構(gòu)有個(gè)總體了解,推薦大家看 DevCW 寫(xiě)的這 3 篇文章:

大家對(duì)于 clean 架構(gòu)可能不是很清晰,大家看這里,這里有比較詳細(xì)的 mvc.mvp.clean.aac 對(duì)比


優(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)行柵格化渲染


持續(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é)作,組織,很贊


通用技術(shù)和開(kāi)發(fā)工具支持


資源


感悟

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


面試


第三方集成經(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ì):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容