Android開發技術周報 Issue#105
新聞
教程
-
Android 復雜的列表視圖新寫法: MultiType 詳解篇
在開發我的 TimeMachine 時,我有一個復雜的聊天頁面,于是我設計了我的類型池系統,它是完全解耦的,因此我能夠輕松將它抽離出來分享,并給它取名為 MultiType.從前,比如我們寫一個類似微博列表頁面,這樣的列表是十分復雜的:有純文本的、帶轉發原文的、帶圖片的、帶視頻的、帶文章的等等,甚至穿插一條可以橫向滑動的好友推薦條目。不同的 Item 類型眾多,而且隨著業務發展,還會更多。如果我們使用傳統的開發方式,經常要做一些繁瑣的工作,代碼可能都堆積在一個 Adapter 中:我們需要覆寫 RecyclerView.Adapter 的 getItemViewType 方法,羅列一些 type 整型常量,并且 ViewHolder 轉型、綁定數據也比較麻煩。一旦產品需求有變,或者產品設計說需要增加一種新的 Item 類型,我們需要去代碼堆里找到我們原來的邏輯去修改,或者找到正確的位置去增加代碼。這些過程都比較繁瑣,侵入較強,需要小心翼翼,以免改錯影響到其他地方。
-
說到Android MVVM,相信大家都會想到Google 2015年推出的DataBinding框架。然而兩者的概念是不一樣的,不能混為一談。MVVM是一種架構模式,而DataBinding是一個實現數據和UI綁定的框架,是構建MVVM模式的一個工具。之前看過很多關于Android MVVM的博客,但大多數提到的都是DataBinding的基本用法,很少有文章仔細講解在Android中是如何通過DataBinding去構建MVVM的應用框架的。View、ViewModel、Model每一層的職責如何?它們之間聯系怎樣、分工如何、代碼應該如何設計?這是我寫這篇文章的初衷。
-
目前網絡中圖片仍然是占用流量較大的一部分,對于移動端更是如此,因此,如何在保證圖片視覺不失真前提下縮小體積,對于節省帶寬和電池電量十分重要。然而目前對于JPEG、PNG、GIF等常用圖片格式的優化已幾乎達到極致,因此Google于2010年提出了一種新的圖片壓縮格式 — WebP,給圖片的優化提供了新的可能。WebP為網絡圖片提供了無損和有損壓縮能力,同時在有損條件下支持透明通道。據官方實驗顯示:無損WebP相比PNG減少26%大小;有損WebP在相同的SSIM(Structural Similarity Index,結構相似性)下相比JPEG減少25%~34%的大小;有損WebP也支持透明通道,大小通常約為對應PNG的1/3。
-
其實最早的時候,閃屏是用來在App未完全啟動的時候,讓用戶不至于困惑App是否啟動而加入的一個設計。而現在的很多App,基本上都把閃屏當做一個廣告、宣傳的頁面了,貌似已經失去了原本的意義,但閃屏,不管怎么說,在一個App啟動的時候,都是非常重要的,設計的事情,交給UE吧,開發要做的,就是讓App的啟動體驗,做到最好。
-
mars 是微信官方的終端基礎組件,是一個使用 C++ 編寫的業務性無關,平臺性無關的基礎組件。目前接入平臺:Android、iOS、Mac、Windows、WP等 。現正在籌備開源中。可以這么說,接入 mars 之后,開發一個應用只需要把開發重心放在業務層和 UI 層上,底層的日志模塊和網絡模塊在 mars 中都已經提供。在使用用戶數上有月活躍8億的微信用戶幫忙背書(數據來源于財報)。 在數據監控上,純網絡監控,長連接有18項 短連接7項。接下來我重點講今天的主角mars的 xlog 部分。我們先來思考一下為什么需要日志,日志什么時候能顯示其作用。
-
React Native(下文簡稱 RN)開源已經一年多時間,國內各大互聯網公司都在使用,攜程也在今年 5 月份投入資源開始引入,并推廣給多個業務團隊使用,本文將會分享我們遇到的一些問題以及我們的優化方案。
-
大幅提高Android開發效率之Android項目模板化(下)
在《 大幅提高Android開發效率之Android項目模板化(上) 》中我們了解了如何用 Android Studio Template 大幅減少寫業務代碼前的工作量,同時也稍微提了下用 Live Template 減少寫業務代碼過程中的“樣板式代碼”。可能有朋友會問,我們這么緊張這點效率真的必要么?這個問題我先不回答,我們先來看看一個場景:寫一個單例。單例模式應該是開發過程中最常見的設計模式之一了。寫單例前總得先糾結一下吧,單例模式這么多種實現方式該用哪種好呢?選定了實現方式后,老老實實寫一堆代碼,然后你會突然發現除了類名不一樣外,其他代碼都是一模一樣,這時你心里會不會隱隱約約覺得這是可以優化的?
-
從微信公眾號介紹 Tinker 開始就一直關注 Tinker,自己也一直在做熱修復相關的開發,但一直都是在踩坑的狀態,在 MDCC 的時候也和邵文同學聊了一下,從看到框架代碼開始就覺得其穩定性相當的好,而整個框架里我在意的幾部分是: 1. DexDiff 我覺得這是最體現微信做事風格的一個模塊:要把一個技術做到極致,像之前開源的幾種方案里 Andfix 的補丁粒度是方法,像 nuwa、rocoofix 類似的補丁粒度是類,其他有很多采用 bsdiff 的,其實上述的方法都會由于一些的情況造成補丁包變得很大(這個后面會講原因),而 Tinker 是基于 Dex 的文件結構來下手,將產生變化的結構提取出來,產生的補丁非常小,而且在 diff 的過程中也處理了一些會造成補丁包很大的場景,這個后續再談。之前有同學跟我說這個是反編譯過程,其實并不是如此。
-
Android 7.1 允許 App 自定義 Shortcuts,類似 iOS 的 3D touch。通過在桌面長按 App 彈出 Shortcut 列表,點擊某個 Shortcut 快速進入某項操作,同時 Shortcut 可以拖動到桌面進行固定,由于 7.1 SDK 的 Sources 尚未開放,目前大部分內容還是根據官方 API 文檔而來,還有些細節和可能的 Bug 還得等 Sources 開放。Shortcuts 全面介紹分為兩篇,本文是基礎介紹,關于 Shortcuts 一些不錯的實踐和目前的問題可訪問 trinea.cn 最新文章。
-
鑒于一些關于OKHttp3源碼的解析文檔過于碎片化,本文系統的,由淺入深得,按照網絡請求發起的流程順序來講解OkHttp3的源碼。在自己學習的同時,給大家分享一些經驗
-
安卓AOP三劍客:APT,AspectJ,Javassist
AOP:面向切面編程(Aspect-Oriented Programming)。如果說,OOP如果是把問題劃分到單個模塊的話,那么AOP就是把涉及到眾多模塊的某一類問題進行統一管理。Android AOP就是通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,提高開發效率。
-
The key concepts of app tracking for developers
Valuable information for Android developers about mobile analytics
開源庫 & App
-
一個易用可擴展的 Android 日志庫。在實現主流日志庫幾乎所有功能的前提下,專注于代碼架構和擴展性方面的設計,堪稱史上最強的 Android 日志庫。
-
A simple, annotation-based library for making deep link handling better on Android
-
微信tinker補丁管理,后端代碼+客戶端sdk
-
一個輔助設計師方便 review UI 的 view 組件集合
-
Big image viewer supporting pan and zoom, with very little memory usage and full featured image loading choices. Powered by Subsampling Scale Image View, Fresco, Glide, and Picasso.
-
A tiny launcher or as Samsung likes to call it Floating Toolbox.
-
一個基于 Activity 視圖操作管理庫,可以實現 Activity 之間任意跳轉、關閉任意一個 Activity 以及結束應用程序等功能
-
能夠動態加載外部apk中的View以及資源,能夠熱修復線上View,以及模塊化更新
-
A layout that implemented ripple effect for transition animation.
-
一個可以取詞的TextView
-
一個可以讓你在瀏覽器里管理應用 SQLite 數據庫的庫
工具
-
Bug Fixes、IntelliJ 2016.2.5、URL Assistant、Lint Enhancements(Many new checks, and baseline support)、WebP Support、Pixel & Pixel XL device definitions、Search for Vector Asset Wizard、ConstraintLayout Editor support - Ratio and Chains support。
-
gradle-build-properties-plugin
External properties files support for your build scripts.
設計
-
隨著 Google Pixel 的發布, 很多應用都已經 (或者開始考慮) 給自己添置了一個圓形的 launcher icon. 加入圓形圖標后, 在 Google Pixel 的主屏上就產生了還算不錯的一致性. 這個圓形圖標至少目前是只在 Google Pixel 上支持的, 所以就算你沒做這樣一個圖標, 大部分情況其實也是無所謂的。
-
最早的下拉刷新設計源自于Tweetie 這款應用的設計,設計師Loren Brichter 是這種令人欲罷不能的交互的締造者。現在,下拉刷新的交互幾乎無處不在,但即便如此也讓人無法輕易忽視它帶來的快感。從推ter 到 Gmail,從QQ到新浪微博,它幾乎存在于你觸手可及的每一個應用當中。
-
設計師都知道,設計不只是為了好看。設計也決定用戶如何融入一個產品,無論是網站還是app。這是一種交談。導航就是一種交談。因為如果用戶不明白使用方式,你的網站或app再漂亮都沒用。
活動
-
北京 GDG 一年一度的開發者大會 DevFest 2016 再度來襲,現已正式開放報名!今年是北京 GDG 第五次舉辦 DevFest 大會,最近四屆一直保持 500 人的規模。DevFest 是完全由社區組織者、志愿者獨立籌備的活動,是國內少數高質量、無廣告、免費的開發者大會。本次大會分兩個會場主要面向 Android 和 Web 開發者,由國內資深工程師給大家帶來分享。此外,還有 TensorFlow 的介紹內容。
書
來自:http://www.androidweekly.cn/android-dev-weekly-issue-105/