主頁 > 移動端開發 > Flutter 與 Compose怎么選?小孩子才做選擇

Flutter 與 Compose怎么選?小孩子才做選擇

2021-08-01 07:56:01 移動端開發

寫在開頭

其實自從 Jetpack Compose 面世以來,關于 Flutter 與 Compose 之間的選擇問題就開始在 Android 開發中出現,就如同之前有 iOSer 糾結在 Flutter 和 SwiftUI 之間選誰一樣,首先 Compose 是 Jetpack 系列的全新 UI 庫,理解下這點!Compose 是 Jetpack 系列的成員之一,所以可以被應用到 Android 界面開發中,所以你也可以選擇不用,用不用都能開發 Android 的 UI ,然后再說 Compose 出生的目的:就是為了重新定義 Android 上 UI 的撰寫方式,為了提高 Android 原生的 UI 開發效率,讓 Android 的 UI 開發方式能跟上時代的步伐,

** Compose 是 Android UI 的未來,現階段你可以不會,但是如果未來你會繼續在 Android 平臺的話,你就必須會,**

這里分享大佬寫的Jetpack Compose 鏈接:重磅首發!Android Jetpack Compose 完全開發手冊,從入門到精通!
接下來是分享本文大佬對Jetpack Compose原文作者鏈接:https://www.jianshu.com/p/cd8452321bb4

名詞決議:

以下用到的專業術語可能會有出入,為了避免混淆,下面做一個名詞決議表:

名詞決議備注
組件可以控制頁面展示的部分UI的邏輯單元
View可以展示的UI,并具備自己維護狀態的能力
微件組件,可以控制頁面展示的部分UI的邏輯單元

Compose官方檔案中,新發明了一個名詞——“微件” 微件 可以理解為Android目前用到的各種 View,也可以理解為H5前端里常說的 組件

1 Compose是什么

Jetpack Compose 是用于構建原生界面的新款 Android 工具包,它可簡化并加快 Android 上的界面開發,使用更少的代碼、強大的工具和直觀的 Kotlin API,快速讓應用生動而精彩,

這么一聽感覺有點抽象,不知道再講什么,

我來翻譯一下:

Jetpack Compose 是一款基于Kotlin API,重新定義Android布局的一套框架,它可以更快速地實作Android原生應用,節省開發時長,減少包體積,提高應用性能,

節省開發時長,減少包體積,提高應用性能, 這個聽起來很誘人,我們來看看它的效果如何,

1.1 Android Studio 對Compose 的支持

強大的預覽

這一功能基于新版Android Studio 對Compose 的支持,

新版的Android Studio Arctic Fox(現在還是Canary版本) 中添加了許多新工具來支持Jetpack Compose新特性,比如:實時文字、影片預覽,布局檢查等等,

1.1.1 強大的預覽

新的Android Studio 增加了對文字更改實時預覽的效果,可以在Preview、模擬器、或者真機上實時預覽,

1.1.2 影片預覽

可以在AndroidStudio內查看、檢查或播放影片,還可以逐針播放,

1.1.3 布局檢查器

Android Studio Arctic Fox 增加了布局監測器對Compose的支持,可以分析Compose組件的層級,如下所示:

1.1.4 互動式預覽

在此模式下,你可以與界面組件互動、點擊組件,以及查看狀態如何變化,通過這種方式,你可以快速獲得有關界面如何反應的反饋,并可快速預覽影片,如要啟用此模式,只需點擊“互動”圖示 ,系統即會切換預覽模式,

如需停止此模式,請點擊頂部工具列中的 Stop Interactive Preview,

以上是AndroidStudio對Compose的支持,可以說是大手筆了,

1.2 Jetpack Compose 使用前后對比

你以為Compose只是添加了預覽功能?那可不是,

從普通應用切換到Compose應用,你的應用速度和性能可以得到大幅提升,

我們來看一個Google官方改造的應用示例,

1.2.1 APK 尺寸縮減

用戶最為關心的指標,莫過于 APK 大小,

下面是開啟了 資源縮減 的最小化發布版 APK (使用了 R8) 通過 APK Analyzer 所測量的結果:

關于上述數字的說明:

1、使用了 APK Analyzer 報告的 “APK file size” (而不是下載時的大小), APK 大小分析

2、在使用了 Compose 后,我們發現 APK 大小縮減了 41%,方法數減少了 17%

1.2.2 代碼行數

源代碼行數雖然不能作為衡量軟體好壞的標準,但是可以對比出一個實驗在“瘦身”上面做了多大的努力,為觀察實驗變化提供了一個統計視角,

從圖中可以看到,XML 行數大幅減少了 76%再見了,布局檔案,以及 styles、theme 等其他的 XML 檔案 ,

同時,Kotlin 代碼的總行數也下降了,

這就是 APK 能夠瘦身的很大一部分原因,

1.2.3 構建速度

構建速度是開發者們十分關心的一項指標,

這里需要做一些說明:

“完全接入 Compose” 使用的是最新版本的 Dagger/Hilt,該版本使用了 Android Gradle Plugin 7.0 中的新 ASM API,而其他版本使用了較舊的 Hilt 版本,其使用了不同的機制,會嚴重拖慢生成 dex 檔案的時間,

除此之外,Kotlin 編譯器與 Compose 編譯器插件為我們所做的事情,如 位置記憶化、細粒度重組 等作業,構建時間能夠 減少 29%, 可以說十分驚人,

2 如何優雅地使用Compose

上面講了很多Compose的優點,那么,接下來我們如何使用它呢,

2.1 準備

在開始使用Compose之前,你需要具備一下基礎,

  • 下載 Android Studio Arctic Fox 或更高版本
  • Kotlin 1.4.32 或更高版本
  • Kotlin 語言使用無障礙

2.2 如何快速學習Compose

接下來,我將會給大家介紹一份2021年最新整理出來的《Jetpack Compose 完全開發手冊》,手把手教大家Jetpack Compose從入門到精通,

這份資料旨在給希望了解、學習、應用Android Jetpack Compose的小伙伴一個參考資料,

資料詳情

有需要的朋友可以【點擊此處】或者通過下方代碼塊找我免費領取,

//wechat number:
study5233
1
2

希望這份資料可以給希望了解、學習、應用Android Jetpack Compose的小伙伴一個參考,

第一章 初識 Jetpack Compose

  1. 為什么我們需要一個新的UI 工具?

  2. Jetpack Compose的著重點
    加速開發
    強大的UI工具
    直觀的Kotlin API

  3. API 設計
    image

  4. Compose API 的原則
    一切都是函式
    頂層函式(Top-level function)
    組合優于繼承
    信任單一來源
    image

  5. 深入了解Compose
    Core
    Foundation
    Material

  6. 插槽API

第二章 Jetpack Compose構建Android UI

  1. Android Jetpack Compose 最全上手指南
    Jetpack Compose 環境準備和Hello World
    布局
    使用Material design 設計
    Compose 布局實時預覽
    ……

  2. 深入詳解 Jetpack Compose | 優化 UI 構建
    Compose 所解決的問題
    Composable 函式剖析
    宣告式 UI
    組合 vs 繼承
    封裝
    重組
    ……

  3. 深入詳解 Jetpack Compose | 實作原理
    @Composable 注解意味著什么?
    執行模式
    Positional Memoization (位置記憶化)
    存盤引數
    重組
    ……

第三章 Jetpack Compose 專案實戰演練(附Demo)

  1. Jetpack Compose應用1
    開始前的準備
    創建DEMO
    遇到的問題

  2. Jetpack Compose應用2

  3. Jetpack Compose應用做一個倒計時器
    資料結構
    倒計時功能
    狀態模式
    Compose 布局
    繪制時鐘
    !](https://upload-images.jianshu.io/upload_images/26079141-4d23a67f86c3d631.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  4. 用Jetpack Compose寫一個玩安卓App
    準備作業
    引入依賴
    新建 Activity
    創建 Compose
    PlayTheme
    畫頁面
    底部導航欄
    管理狀態
    添加頁面
    image

  5. 用Compose Android 寫一個天氣應用
    開篇
    畫頁面
    畫背景
    畫內容
    ……

  6. 用Compose快速打造一個“電影App”
    成品
    實作方案
    實戰
    不足
    ……

3 Compose是否值得一試

前面講到Compose的特性,優缺點,以及如何快速入門、如何正確使用,

那么Compose是否值得應用到專案中來呢?

這些還需要具體情況具體分析,

如果你是新專案

我建議你大膽嘗鮮,畢竟聰明的“部分重繪”機制,是提高頁面性能的重要手段,而且宣告式布局在未來應該會取代傳統的xml布局形式,這是大勢所趨,

如果你是現有專案改造,

首先,你可以評估一下是否已經具備開始Compose的基礎能力——kotlin語言的靈活運用

Compose可以說是為Kotlin量身定制的、與View model緊密結合的一種衍生物,有了KotlinView modelCompose的作用可以發揮到極致,也就能實作前面的目標:

  • 構建時間能夠 減少 29%
  • XML 行數大幅減少了 76%
  • APK 大小縮減了 41%
  • 方法數減少了 17%

如果你已經具備了上述能力,那么可以在小范圍進行試點,或者從性能要求比較高的頁面入手,

建議先單個頁面引入,最后再做全量替換,Google官方的改造案例也是這么做的,

最后,放開手,擼起來吧!

社區需要你我共建,更需要走在前沿的實踐者,期待看到更多、更好的文章出現,這就是我寫作的動力,

最后

我把自己這段時間整理的Android最重要最熱門的學習方向資料放在了我的GitHub里面還有不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,

資源持續更新中,歡迎大家一起學習和探討,

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/291230.html

標籤:其他

上一篇:Kotlin 特殊的registerActivityLifecycleCallbacks+一個非Activity轉跳到另一個Activity

下一篇:[iOS開發]weak底層原理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more