Google IO 2019 Android 太長不看版

来源:https://www.cnblogs.com/mengdd/archive/2019/05/17/Google-IO-2019-Android-TLDR.html
-Advertisement-
Play Games

Google I/O 2019, Android版本的學霸畫重點的筆記. ...


Google I/O 2019, 這裡有個playlist是所有Android開發相關的session視頻合集:
Android & Play at Google I/O 2019
當然啦每個視頻都看不太現實了, 就挑幾個看看吧.
這裡是我個人的一點筆記, 可以作為一個太長不看版, 感興趣的點再自己瞭解下.

CameraX

  • 更易用的API.
  • 隱藏底層細節.
  • 相容各種設備.
  • 自動化測試套件.

Android Studio UI design tools and Debugging Tools

Design Toolchain:

Layout Editor

  • Blueprint mode.
  • context menu來提供一些更方便的工作. constraint popup. constraint menu.
  • 預覽改進: RecyclerView的預覽改進. 預覽sample數據.
  • attribute界面可以指定dimen中定義的自定義尺寸.

相關文章:
https://medium.com/androiddevelopers/android-studio-project-marble-layout-editor-608b6704957a

  • navigation components的使用.
  • navigation editor中的預覽.

Resource Manager:

  • Batch Import, 可以直接把圖片資源拖拽整理進去. * 可以把svg拽進去變成vector drawable.
  • 提供了layout, color等的小圖預覽.
  • 顏色的alpha終於可以用百分比設置了.

Layout Inspector:

  • 改進了屬性顯示.
  • 可以直接預覽修改.
  • 3D顯示, 可以查找某個背景顏色到底是哪一層設置的.

(我的思考: 現在Android Studio越來越鼓勵開發者直接利用圖形界面來設置layout了, 總是喜歡直接編輯xml算不算是早期Android遺老遺少的一個陋習?)

What's New in Architecture Components

Kotlin first.

Data binding:

  • Faster complilation:
    android.databinding.incremental = true.
    增量註解處理.
  • 錯誤信息改善了. (耶!)

How to access views?

  • 幾種find view的方法比較.
  • View Binding: coming soon in Android Studio 3.6.

Lifecycle

  • ViewModel和Saved State.
    SavedStateHandle: 傳入ViewModel, 用於保存一些在應用被殺死後重啟仍然需要恢復的值.
  • 一些代碼的寫法被優化了.

WorkManager

優點: deferrable, persistent, constraint-based, backwards compatible.

  • 性能: on-demand initialization.
  • Google Play Services integration.
  • 相容性.
  • 測試.
  • Future: foreground service.

Room

  • Coroutines, 協程支持: suspend方法.
  • Full text search: @Fts4, MATCH.
  • Database Views. @DatabaseView. 重新組織一個可查詢的數據結構, 類似於重新組裝一個表, 用來查詢.
  • 擴展了Rx支持: 資料庫操作方法可以返回Single, Completable等Rx類型.
  • Future: 註解處理; 關係改善; migration改善; 協程Channel&Flow.

Paging

What's next in Paging?

  • Built in network support with error handling.
  • Headers & footers
  • 更好的Rx和協程集成.
  • ViewModels scoped to Navigation Graphs.
  • Navigate by URI.
  • Dialog as destinations.
  • Safe Args.
  • Future: Better support for dynamic features.

最後廣告了一下這個課程:
https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012

What's New in Android

What's new in Android Q:

System UI

  • SAW: System Alert Window. -> 安全問題. -> 引入Bubbles (API 29).
  • Dark theme.
  • Share sheet: 內容預覽, 粘貼, 性能改善.
  • 通知分區域: Priority, Gentle.
  • Notification actions: 自動生成回覆.
  • 手勢導航.

Platform

  • WebView: Trichrome: Separate WebView/Chrome, hung renderer檢測.
  • Accessibility.

Text

  • API 23預設開啟了連字元, 性能下降, 所以在Q預設關閉了.
  • API for fonts.
    還單獨有個text的演講專門講這個.

Magnifier

private APIs

要麼用public的, 要麼private改成public的, 要麼加新的.
gray list中加了更多的(以後的版本將不能用了).

Android Runtime (ART)

Profile, 啟動改善, GC改善.

Kotlin

Q的新API有nullability註解.

Security

TLS 1.3 預設開啟.
生物識別改進.

Jetpack Compose

全新的UI組件: Kotlin, Reactive.
(很像Flutter.)

Privacy

  • 外部存儲限制.
  • Location: 許可權設置更新. 新增只有前臺時允許的選項.
  • 後臺啟動Activity限制.

其他

  • CameraX
  • Architecture Components
  • ViewPager2
  • ViewBindings
  • Blend Modes
  • RenderNode
  • HardwareRenderer: 可以控制光源(陰影)
  • Hardware Bitmaps
  • Audio Playback Capture
  • 應用不能控制wifi開關
  • Settings Panel

Build a Modular Android App Architecture

為什麼我們要模塊化呢?

  • scale: 更易分組開發人員; 更易查找資源.
  • 更快的編譯速度.
  • 更快的CI. 只執行有修改的module相關的測試.
  • Good for business. App Bundles: 更小的apk.
  • 分離的feature測試. 快速AB Test一個新功能.

兩種Modules:

  • Library Module
  • Dynamic Feature Module

如何分離模塊呢?

  • by feature
  • by layer
  • feature & layer.

模塊間的依賴

Module A依賴Module B:

  • api: Module B is part of my Public API. 依賴A的可以看到B.
  • implementation: Module B is my Implementation Detail. 依賴A的看不到B.

這裡討論了一個分層模塊化構架中的問題: repo模塊對資料庫模塊的依賴, 用api, 上層可以直接使用資料庫模塊中的實例類, 但是同時暴露了DAO, 破壞了模塊化分離的意義.
兩個選擇:

  • 規定在上層不要操作資料庫.
  • 新建一個通用的數據模塊, 存放實體類, 資料庫模塊implementation依賴它, repo模塊api依賴它.

測試.

Dynamic feature modules

幾個挑戰:

  • 導航. 需要hardcode類名.
  • 找依賴. Dynamically loaded modules.

代碼例子: android-dynamic-code-loading
結合dagger.

資料庫

資料庫的幾種選擇:

  • 一個資料庫: 好維護, 好共用, 但是沒有分離.
  • 一個核心資料庫 + 每個feature自己的資料庫: 有了分離, 但是共用成了問題. 如果hybrid: 讓有交互的模塊共用, 也是挺複雜的.
  • 一個Room的bright feature: Multi-module資料庫. (Not Available now.)

最後閑聊了幾句關於構架的討論.
Android team只是提供options, 最後的選擇還是depends.

  • 考慮: short time costs, long time benefits.
  • 用戶不會因為app的構架好而給你5星.

What's New in the Android OS User Interface

三個方面:

  • Sharing: 性能改進; UI改進; 更多自定義選項.
  • Notifications: gentle; actions.
  • Multitasking: Bubbles.

Improving App Performance with Benchmarking

Jetpack Benchmark Library:
https://developer.android.com/studio/profile/benchmark.md

  • 可以測量工作方法的時間: 重覆測量的Rule;
    合理排除初始化時間.
  • UI測試.
  • 新增module: Benchmark Module.

工具實現細節介紹.

Best Practices:

  • Start with tracing.
  • Synchronous blocks.
  • Small blocks
  • Hot code.
  • Caches.
  • @RunWith(Parameterized)
  • 不要比較設備.

例子: googlesamples/android-performance

最後, 歡迎關註微信公眾號: 聖騎士Wind
微信公眾號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從這個表sys.dm_db_index_usage_stats可以獲取到所有表或某一張表的用戶或系統異動時間: SELECT OBJECT_NAME(object_id) AS table_name, last_user_seek, last_user_scan, last_user_lookup, ...
  • 這是對自己學習燕十八老師mysql教程的總結,非常感謝燕十八老師。 依賴軟體:mysql 系統環境:win 註:本次所有命令都是在命令行上執行 基礎命令 : 啟動mysql:net start mysql(mysql為服務名) 關閉mysql服務:net stop mysql(mysql為服務名) ...
  • 大數據已然成為當前IT業界的紅人,然而在很多人想涉足這個領域時,卻對大數據的學習具有畏難情緒,望而卻步,知難而退。大數據的學習真的有那麼難嗎?據我學習大數據的經驗來說,大數據是挺難的,難在其系統龐大,很難系統地、全面地學習,但是也有方法啃下這塊硬骨頭。 第一步當然是搞清楚怎麼學習,這個問題的答案往往 ...
  • mongodb在存儲大數據時,對查詢的欄位需要添加索引,我測試的是阿裡雲30多萬的數據量,不加索引查詢已經到 ,而添加索引之後是 級! 為集合加索引 mongodb支持內嵌屬性添加索引 添加唯一索引 createIndex建立索引時的參數 background Boolean 建索引過程會阻塞其它數 ...
  • 安裝選custmer自定義安裝。預設安裝全部在c盤。自定義安裝的時候有個advance port選項用來選擇安裝目錄。 MySQL常見的一些操作命令 #切換當前目錄到d盤下D: #切換到指定的目錄下cd D:\Program Files (x86)\MySQL\MySQL Server 5.6\bi ...
  • 1、日期大小的比較,傳到xml中的日期格式要符合'yyyy MM dd',這樣才能走索引,如:'yyyy'改為'yyyy MM dd','yyyy MM'改為'yyyy MM dd'【這樣MYSQL會轉換為日期類型】 2、條件語句中無論是等於、還是大於小於, 左側的條件查詢欄位不要使用函數或表達式或 ...
  • 一、Overview I.在資料庫層面優化 1. 表結構是否合理 1.1 表欄位是否的數據類型是否正確; 1.2 根據應用系統的工作類型(例如OLAP/OLTP系統),每個表是否有合適的欄位數量,比如執行頻繁更新操作的應用通常使用更多的表,每個表更少的欄位;分析大量數據的應用通常使用更少的表,每個表 ...
  • ProgressBar有2個子控制項: SeekBar 拖動條控制項 RatingBar 星級評分控制項 1、拖動條控制項 也可以使用自定義的滑塊: 說明: 並不會自動顯示對應的刻度值。 滑塊可以滑動,但沒有事件響應。需要我們在.java文件中添加事件監聽: 滑動滑塊一次觸發的事件: 最先開始時觸發 onS ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...