Android Weekly Notes Issue #232

Android Weekly Issue #232

November 20th, 2016
Android Weekly Issue #232
本期內容包括: Kotlin的優點討論; MVVM模式結合RxJava和Retrofit的應用構架實現; Android中傳感器使用; 如何給App寫單元測試; Reductor的組合使用; Android應用進程被殺死的狀態恢復和問題處理; Kotlin中的Anko; 後臺任務處理庫"Android Job"; VectorDrawable和PNG的使用問題等.html

本期開源庫: 給ImageView和RelativeLayout的底部加曲線; 長按彈框; Switch Button控件; 給View加深度/厚度的庫.java

ARTICLES & TUTORIALS

How Kotlin became our primary language for Android

做者他們team想要徹底用kotlin開發一個應用.
本文是他們的心得體會.android

關於函數式編程的學習, 做者推薦: 一個Scala的課程.git

Kotlin的優點: 和Java能夠互相調用; 函數式語言; function purity; 高階函數(函數能夠做爲參數或返回值); 不可變性(val); Null-safety; Anko; Kotlin Android extensions(移除了ButterKnife); 還有對初學者很友好, 能夠擺脫不少第三方的依賴, 函數擴展等等優點.github

RxJava 2: Android MVVM Lifecycle App Structure with Retrofit 2

做者一年多之前寫過一個這個文章: RxJava: Android MVVM App structure with Retrofit, 介紹MVVM結合Retrofit和RxJava的App架構模式. 此篇文章是一年後做者對此的改進.編程

主要內容有:redux

  • 1.經過View和ViewModel之間的協議接口, 讓ViewModel知道View的生命週期變化.
  • 2.RxJava2的流式類型: Completable, Maybe, Flowable的使用.
  • 3.用RxJava操做符組合網絡請求: 讓不一樣的網絡請求一塊兒發送, 而且都返回之後才獲得通知 -> 用.zip(). 順序鏈接不一樣的網絡請求 -> .flatMap(), .andThen().
  • 4.後臺網絡請求和View更新的處理: 不取消網絡請求, 等View再次resume的時候檢查狀態再更新. 這裏提供了兩種選擇, 一種是用前面提到的協議接口中的生命週期方法, 另外一種是用AsyncProcessor.
  • 5.Mock Retrofit的網絡請求.

Tech Talks - You Do Have Something To Say!

這篇文章鼓勵你分享你的知識, 經驗, 問題及解決方法, 不管是經過演講仍是寫出來的方式.c#

Da Real Fragmentation - Sensors

介紹了Android中傳感器的使用.網絡

Simple unit tests for Android

如何給你的App寫簡單的單元測試.架構

Reductor - Redux for Android. Part 2

這是系列文章中的一篇, 繼續講Reductor library – Redux的Android版實現.

這篇文章結合例子將如何組合使用以及用@CombinedState來生成代碼.

Android process death — and the (big) implications for your app

本文探討進程被殺死有可能致使的種種問題.

你的Android應用若是在paused或者stopped狀態, 那麼它任什麼時候候都有可能會被系統殺死. 這時候你的Activity, Fragment和View狀態將被保存, 當你回到應用的時候, 系統會從新啓動進程, 從新建立Activity, 存儲的狀態會在bundle中返回.

這個過程存在一個問題: 整個進程都被殺死了, 全部單例(或application scope的對象), 臨時數據, 還有retained Fragment中的數據, 這些全部都會處於一種全新建立的狀態, 但惟有一個不一樣, 一些在bundle中存儲的狀態被恢復出來了.

這樣有可能會致使一些異常, 好比你的界面想要恢復一種狀態, 可是數據已經被清空了.

如何測試這種狀況呢?

  • 使用App, home鍵把它放進後臺, 殺死app, 再恢復.
  • 打開選項"Don't Keep Activities". 這種測試並不會殺死進程, 只會測試Activity的狀態恢復.
  • 設置Developer options中的Background Process Limit爲"No background processes". 這樣把應用放在後臺, 打開另外一個應用, 再回來本身的應用, 將會重啓進程.

相關問題信號

  • 單例
  • 保存可變數據的共享的實例
  • Application類中保存的數據和狀態
  • 可變的靜態字段
  • Retained fragments(狀態恢復了, 可是數據卻丟失了)
  • 基本上任何沒有在onSaveInstanceState()中保存可是你卻依賴的狀態

這些問題沒有惟一的解決方案, 取決於你的應用.

400% faster layouts with Anko

做者把本身的一個佈局改成用Kotlin的Anko, 而後測試性能.

好處是:

  • 1.性能提高了, 避免了XML的運行時解析所花費的時間.
  • 2.能夠動態地加入邏輯, 好比版本判斷, 屏幕尺寸, 方向判斷等.

做者用的測試性能的工具是: AndroidDevMetrics

Background Work with Android Job and Dagger

在Android上的後臺工做, 你能夠選擇Alarm Manager, Job SchedulerGCM Network Manager.

爲了幫開發者從每種實現中抽象出來, Evernote開源了一個庫: Android Job. 本文介紹了這個庫如何使用.

VectorDrawable PNG

做者他們的應用中有VectorDrawable的版本兼容問題, 用support library中的Compat版本也很差使, 因而他們在舊版本決定使用自動生成的png.

而後發現了生成png的顏色設置問題, 在舊版本生成的圖片用的是fillColor而不是tintColor. 把fillColor設置成想要的顏色便可.

DESIGN

Depth Library by Daniel Zeller

一個應用, 展現了Depth-LIB-Android-的功能.

LIBRARIES & CODE

Crescento

ImageViewRelativeLayout底部加上曲線的庫.

LongPressPopup

長按出現彈框的庫.

RMSwitch

一個Switch Button的庫, 帶有更多自定義擴展功能.

Depth-LIB-Android

這個庫給View加上深度/厚度.

相關文章
相關標籤/搜索