1. 程式人生 > >《App研發錄》讀書筆記

《App研發錄》讀書筆記

這本書基本上涵蓋了移動開發中常見的關注點,之所以用關注點而不用技術點這個詞是因為這本書並沒有講到具體的技術實現,但提供了行之有效的解決方案。讀這本書的時候非常有感觸,它很多的框架設計和解決方案與我實際開發中都是不謀而合的(有點自誇的意思哈)。所以也非常感謝作者能這麼詳細的記錄下來。這篇讀書筆記是記錄我在閱讀過程中感覺需要重點強調的地方和自己的一些理解,也供大家能快速的瀏覽本書的章節。

關於重構

  • 對於新專案,一開始就要把它設計好,因為產品留給我們的重構機會不多

  • 對於老專案:

    1、如果不重構帶來的開發難度或者引發的bug 很嚴重,那麼必須要跟產品商量了。

    2、重構的程式碼一定的在本期迭代上線後,再合併到下期程式碼裡。

    3、重構計劃要詳細要拆分到幾次迭代裡,分期上線。

  • AndroidLib

    搭建一套AndroidLib,或者叫Common,它裡邊封裝了所有於業務無關的邏輯。這樣做為後期的Android模組化 和 Android外掛化開發打下基礎。(模組化開發和外掛化開發是兩個不同的概念)

    這裡有人可能會問把所有的與業務無關的邏輯封裝在一起會不會耦合性太高?其實封裝和解耦本來就是一對矛盾的概念,需要我們自己合理的把握設計,我們這裡講的AndroidLib只是為一個特定的App做框架支援,所以不存在耦合性,假如有多個App需要,則必須把AndroidLib拆分成更小的Lib以適應靈活的場景。

  • 重構後的專案結構

    在拆分package(iOS裡Group)原則上,建議按照bu(業務單元)來分,而不是按照Class來分。因為一個App的bu是不斷變化,不斷增加的,而Class的型別隨著API變化不會變化太大,例如Android上常用就是Activity、Fragment、Adapter等等。

網路底層的優化

  • 我們需要做一個BaseCallback來做統一的onStart、onFinish、onFail、Cookie過期的處理,例如在onStart裡進行showDialog、在onFinish裡隱藏Dialog,在Cookie過期後調整登入頁。這個地方是一個有爭議的設計,因為網路請求的Callback從分層設計上應該屬於Modle,不應該跟UI耦合在一起。在我個人而言更喜歡把BaseCallback看做一個Component,而不是單純的一層Model,這樣更好理解。

HTTP頭的利用

  • 我們在MobileAPI 設計的時候,一開始就要把當前App的資訊通過Http Header告訴伺服器,以便服務端排程Api。一般的做法是把App的package、platform、version等等放在UserAgent裡告訴服務端。

  • 對於手機系統時間不準的問題,該書也有提到,每次呼叫伺服器api時,伺服器api都在reponse header裡返回伺服器的時間,然後跟手機系統時間做時間差,然後每次本地獲取時間就加上這個時間差。

App圖片快取設計

  • 該書介紹了Fresco的三層快取技術

    1、Bitmap快取,在Android5.0及以上Bitmap直接緩存於dalvik vm heap中,而在4.x 及以下bitmap快取在 native heap (ashmem)中,因為dvm對heap大小是有限制的,如果超過這個限制就是OOM

    2、記憶體快取:記憶體快取儲存了圖片的原始壓縮格式,從記憶體快取取出圖片後需要先解碼才能顯示。這個地方會經常提到的Lru 和 SoftReference,SoftReference在2.3以後不再推薦了,因為垃圾回收機制做了修改。

    3、磁碟快取

網路流量的優化

  1. API返回資料要使用gzip壓縮,大於1kb才有必要進行壓縮否則得不償失

  2. 推薦使用ProtoBuffer,這種協議是二進位制格式的,佔空間更小。

  3. 減少API呼叫,一個頁面儘量只發一個請求獲取所需要的資料。

  4. http1.x 是不支援多路複用,為了提升訪問速度可以做TCP長連線或者使用http2.0,當然維護一套TCP長連代價也是不小的。

  5. 建立取消網路請求的機制,這個最新的retrofit2.0 原生支援推薦使用。

  6. 合理的重試機制

  7. 大資料列表的增量更新機制,當遇到一個很大的列表資料有改動時,最好使用增量更新機制來減少傳輸的資料量。

圖片策略優化

  • 做一套ImageServer,App請求圖片url時會帶上它需要的width、height、圖片質量,然後由ImageServer對原始圖片做壓縮處理。目前有很多廠商提供這種服務,比如七牛。

  • App是不是需要把每個ImageView的width、height獲取到呢,按照我的經驗只需要給App定義大、中、小三套width、height基本就夠用了。

  • 在弱網情況下再定義一套圖片質量(quality)的值,就會減少弱網下的流量。

App與H5的互動

  • 定義一套App 和H5 之間跳轉協議,可以通過JS 或者 OverrideUrl來實現。這個跳轉協議裡可以定義簡單的資料型別,String不需要指定,對於int、double需要在值錢記上類似(int)這個的標記,這樣App才能正常解析。

常見錯誤

  • JSONObject 和 JSONArray是不支援序列化的,所以最好是轉換成相應的可序列化的Model再使用。

程式碼規範

  • 在xml的檔名命名時最好加入module(或者叫bu)的名字,例如account_adduser_activity.xml

  • 空格、tab、換行這些格式建議一個團隊裡統一規範,建議使用工具自動檢查:AndroidCodeQuality

  • 將程式碼裡的常量抽取到string.xml中:這個也可以使用工具自動檢查:AndroidLintPlus

安裝包大小

  • png 和 jpg 的區別和使用場景

    同樣尺寸的圖片,png要比jpg大很多,因為png是有透明通道、無失真壓縮的。但系統會對png進行硬體加速,所以同一張圖,png體積大但載入速度卻比jpg快。

  • 從網路載入的圖片考慮到流量和下載速度優先使用jpg,對於引導圖,也傾向於使用jpg,減少包體積。對於iOS啟動圖必須是png,否則稽核會被拒。

    Google釋出了壓縮率更高的WebP,不過iOS想要支援這種格式需要單獨引入WebP解碼器。

  • 單色的icon可以轉換成字型檔案,因為字型是向量圖拉伸不會失真,並且體積會很小。

熱修復能力

  • Android 有andfix、nuwa等,ios有jspatch ,這裡就不在展開了。

後門

後門裡常做的功能有:

  1. API伺服器切換,極大的方便測試人員。

  2. 列印請求API的請求引數和返回結果,不用每次都開代理和後端聯調。

  3. 提供一個後門頁面供H5團隊除錯H5是否與Native工作正常。

  4. 更多的還有 流量統計、電量統計

相關推薦

APP研發讀書筆記:網路底層框架設計

一.統一響應實體類Response      我們一般採用JSON作為API返回結果,資料格式一般為: { "errorCode":0, "errorMessage":""; "res

APP研發筆記

最近兩天在專案不忙的時候讀了《APP研發錄》,雖然是看的PDF版,但還是受益匪淺,由於時間關係,還沒有對其中的問題進行demo驗證, 僅對一些重要內容做了筆記,現將筆記貼出來與大家共同學習,如果有問題,大家可以留言或私信。在今後的額閱讀中,再對筆記的內容進行補充說明。 面

架構設計之APP研發學習筆記

一、APP研發錄總結 1、重構的憂傷 如果版本發行後很短的時間內,就需要對其進行重構,除了小部分其他原因外,最重要的只能說是程式碼寫的爛,架構設計不夠靈活,導致耦合度很高。 要是非得要做重構,必須充分考慮現有資源,在非極端情況下,可

App研發讀書筆記

這本書基本上涵蓋了移動開發中常見的關注點,之所以用關注點而不用技術點這個詞是因為這本書並沒有講到具體的技術實現,但提供了行之有效的解決方案。讀這本書的時候非常有感觸,它很多的框架設計和解決方案與我

讀書筆記App研發--資料快取設計

讀書筆記App研發錄–資料快取設計 標籤(空格分隔): 資料快取 android 優化 資料快取策略 在2G和3G網路狀態下,MobileApi訪問速度過慢,會導致不好的使用者體驗。網路端的資料接受的限制主要是傳輸速度的限制。 策略 減少Mo

App 研發、架構設計、Crash分析和競品技術分析------讀書筆記(第二章)

網路底層框架設計 1、不要自己定義網路請求框架,網路層不要使用AsyncTask 2、在網路返回資料Response的應該有一個規範的格式 { "isError":true, "errorType":1, "errorMessa

APP研發讀書筆記(1、重構)

1、重新規劃Android專案結構 將主專案中的類分門別類的進行劃分,放置在各種包中 詳細介紹如下: activity:所有的activity放在同一個包中,細分的話,將不同模組的activity劃分到不同的包下。 adapter:將所有的介面卡放在一塊

軟體管理沉思讀書筆記

《軟體管理沉思錄》讀書筆記 Watts S.Humphrey和William R.Thomas的著作《軟體管理沉思錄》中所講的,正如書的副標題——SEI的專案管理、人際溝通和團隊協作要訣——那樣,論述了軟體開發和管理工作的很多原則和技巧,可以幫助軟體工作者和管理者形成自己的工作風格和開發

《華為研發讀書筆記與讀後感範文3300字

《華為研發》讀書筆記與讀後感範文3300字:華為,作為中國民營企業的標杆,有很強大的技術積累,包括最近在5G通訊技術上引領行業,制定一些5G標準。已經成為行業標準的起草者之一。今天的華為已經成為中國研發的一張“名片”,成為全世界擁有最多研發專利的企業,所以社會上有一種誤解,認為華為公司從一開始就只專注於研發。

App研發 架構設計 Crash分析和App競品技術分析

第1章原始碼:  1.1 重新規劃Android專案結構  1.1.zip  1.2 為Activity定義新的生命週期 1.2.zip  1.3 統一事件程式設計模型      1.3.zip  1.5 Adapter模板   1.5.zip  1.6 型別安全轉換函式   1.6.zip  第2章原

App研發讀後總結(二)

App開發中高階技巧 2.1  crash 異常收集與統計,作者在書中介紹瞭如何收集crash 到資料庫,如何對大量crash資訊進行去重,如何生成crash報表,如何將crash 自動分配給開發人員提供一整套解決方案。 2.2 作者花了大量時間,列舉出100多個cras

App研發》面世

  古者富貴而名滅,不可勝記,唯倜儻非常之人稱焉。故西伯拘而演《周易》,屈原放逐,乃賦《離騷》。文人雅士一次次的譜寫著千古絕唱,而我亦不能免俗,也要附庸風雅,寫一部前不見古人、後不見來者的經典之作。   於是,歷時一年,嘔心瀝血,結合自身3年來從事App領域的一線實戰經驗,再輔之以從事軟體行業十餘載的奇技淫

App研發》 原始碼

第1章原始碼:  1.1 重新規劃Android專案結構  1.1.zip  1.2 為Activity定義新的生命週期 1.2.zip  1.3 統一事件程式設計模型      1.3.zip  1.5 Adapter模板   1.5.zip  1.6 型別安全轉換函式   1.6.zip 

APP研發》讀記(二)

##第三章:經典場景設計 ###圖片快取設計: 圖片快取的出現是為了避免出現OOM問題,根據需要對圖片的載入進行一些壓縮和優化,它主要完成三個任務: 圖片的快取,可以有效的減少對於流量的消耗,優化使用者體驗 圖片的壓縮載入,降低載入大圖時出現OOM的機率

《大數據日知:架構與算法》讀書筆記(多圖)

打通 導論 ges wid 技術分享 二次 思維 知識點 很好 第二次讀這本書,這次是精讀,畫了思維導圖。書很好,完整的知識結構和由淺入深的介紹,非常全面以至於知識點都梳理了三天。 作為導論式的總覽,對大數據領域有了個總體的認識,接下來可以更針對性地加強和實踐。 總體上

《軟體管理沉思讀書筆記

作者沃茨·漢弗萊從事軟體開發管理長達60多年,在他看來,軟體是難於管理的,因為這是創新工作,屬於腦力勞動。他將軟體開發類比為建造一個大教堂,因為這二者都屬於大規模的創造性活動,這是前人沒有做過的、涉及成百上千人的大規模創作。書中內容被分為四個部分,分別為管理你的專案、管理你的團隊、管理你的領導以及管

讀書筆記___C++沉思(第17節)

泛型演算法就是一種對其所作用的資料結構做盡可能少的約束的方式表達的演算法  以一個簡單的查詢整數陣列中的第一個等於某個值的元素為例 /* 在這個例子中,我們做了四個約束: 分別是查詢的型別是int值 我們對int陣列進行查詢 我們預先已經知道了元素的書目 我們已經預先知道了

這個好用高效的讀書筆記app軟體一定要收藏

開啟軟體首頁就是卡片式的讀書筆記,可以上下左右滑動切換下一條筆記。首頁筆記的推薦是系統根據你原來做的筆記或者看你點贊評論等行為智慧推薦的。切換到下一條後就無法返回到上一條筆記。 點選底部中間的相機按鈕會彈出拍照掃描識別功能的選項,可以選擇圖片或者使用相機拍攝。長按會直接進入建立流

親測這款讀書筆記app軟體能提高你的閱讀興趣

實在是用過太多筆記類app了,但是真正針對讀書做筆記這個場景使用的讀書筆記app很少。今天就給大家帶來一款實測過的軟體。絕對無毒無廣告。 開啟軟體就是第一張圖的畫面,頁面下面就三個按鈕,非常簡潔,甚至說有點簡陋吧。中間那個相機的按鈕點一下就可以使用相機拍照自動錄入書籍片段。長按的話就會

強迫症患者都必須具備的讀書筆記app軟體

特意在手機應用商店搜了下“讀書筆記”四個字,發現出來的都是一些有道雲筆記、印象筆記這些在工作辦公中使用的筆記工具,再往下翻就是一些微信閱讀、愛奇藝閱讀之類的看書app,真正針對讀書做筆記這個場景使用的讀書筆記app軟體很少。 再往下翻你也找不到“流書”這個軟體,雖然流書的主要功能就是拿來