柚子快報(bào)激活碼778899分享:android Kotlin
柚子快報(bào)激活碼778899分享:android Kotlin
Android/Kotlin實(shí)踐匯總
官方編程指導(dǎo)文檔:接口 · Kotlin 官方文檔 中文版
by 關(guān)鍵字用法
by關(guān)鍵字用于實(shí)現(xiàn)委托模式。委托模式允許一個(gè)對(duì)象將某些操作委托給另一個(gè)對(duì)象來(lái)處理,從而減少代碼重復(fù)和提高代碼的可維護(hù)性。如類(lèi)委托(綁定接口到另一個(gè)對(duì)象),屬性委托(綁定屬性到另一個(gè)類(lèi)屬性)
associateWith/associateBy/associate
將集合的值作為Map的鍵或值,并返回Map
groovy轉(zhuǎn)kts
allowInsecureProtocol 改為isAllowInsecureProtocol=true? https://developer.android.com/build/dependencies?hl=zh-cn#kts ?Gradle遷移指南:從Groovy到KTS - 簡(jiǎn)書(shū) Migrating build logic from Groovy to Kotlin Gradle Kotlin DSL Primer Declaring dependencies
Android構(gòu)建資料
https://developer.android.com/studio/build?hl=zh-cn Gradle Kotlin DSL Primerhttps://docs.gradle.org/current/userguide/core_dependency_management.htmlGradle Kotlin DSL Primer
maven發(fā)布
https://github.com/gradle/kotlin-dsl-samples/blob/master/samples/maven-publish/build.gradle.kts
Kotlin注解
以下是 Kotlin 中的一些常見(jiàn)注解及其說(shuō)明: @JvmStatic: 將伴生對(duì)象(Companion Object)中的函數(shù)或?qū)傩跃幾g為與 Java 兼容的靜態(tài)函數(shù)或?qū)傩浴?@JvmOverloads: 生成多個(gè)重載方法或構(gòu)造函數(shù),以便在與 Java 代碼進(jìn)行交互時(shí)可以省略部分參數(shù)。 @JvmField: 將屬性生成為公共的 Java 字段,而不生成對(duì)應(yīng)的 getter 和 setter 方法。 @Volatile: 標(biāo)記屬性為volatile,以確保多線(xiàn)程訪問(wèn)時(shí)的可見(jiàn)性。 @Synchronized: 修飾方法,將方法的執(zhí)行體放在同步塊中,確保方法的原子性。 @Throws: 標(biāo)記方法可能會(huì)拋出指定的異常,以便為 Java 調(diào)用者提供異常信息。 @Deprecated: 標(biāo)記函數(shù)、屬性或類(lèi)為過(guò)時(shí)的,在調(diào)用時(shí)會(huì)發(fā)出警告或錯(cuò)誤。 @Suppress: 禁用指定類(lèi)型的警告,可以級(jí)聯(lián)多個(gè)警告類(lèi)型。 @JvmName: 指定生成的 Java 方法或?qū)傩缘拿Q(chēng)。 @JvmMultifileClass: 將多個(gè) Kotlin 文件編譯成一個(gè) Java 類(lèi)。 @JvmSynthetic: 標(biāo)記生成的方法或?qū)傩詾橐粋€(gè)合成方法,不會(huì)公開(kāi)給 Java 代碼。 @Target: 指定注解的使用范圍,如方法、類(lèi)、屬性等。 這些只是 Kotlin 注解的一小部分,還有其他一些用于特定用途的注解。每個(gè)注解都有其特定的用途和行為,可以根據(jù)實(shí)際需求選擇適合的注解來(lái)使用。在編寫(xiě) Kotlin 代碼時(shí),將這些注解與代碼的需求相匹配可以提供更好的互操作性和代碼質(zhì)量。
inner關(guān)鍵字用法
使用?inner?關(guān)鍵字的區(qū)別在于,如果內(nèi)部類(lèi)需要訪問(wèn)外部類(lèi)的成員(包括屬性和方法),那么需要將內(nèi)部類(lèi)聲明為?inner?類(lèi)。這樣內(nèi)部類(lèi)就會(huì)持有一個(gè)對(duì)外部類(lèi)對(duì)象的引用,并可以直接訪問(wèn)外部類(lèi)的成員。 如果不使用?inner?關(guān)鍵字聲明內(nèi)部類(lèi),那么它就是一個(gè)嵌套類(lèi)(nested class),它不持有對(duì)外部類(lèi)對(duì)象的引用,也就無(wú)法直接訪問(wèn)外部類(lèi)的成員。嵌套類(lèi)的行為更像是普通的頂層類(lèi),它與外部類(lèi)之間沒(méi)有特殊的關(guān)聯(lián)。
launch(Dispatchers.Default) 和 GlobalScope.launch 和 withContext(Dispatchers.IO)
GlobalScope.launch適合于全局性的任務(wù),launch(Dispatchers.Default)適合于受外部作用域控制的任務(wù),而withContext(Dispatchers.IO)不啟動(dòng)協(xié)程,適合于在不同調(diào)度器上執(zhí)行特定類(lèi)型的任務(wù)。在實(shí)際使用中,應(yīng)根據(jù)具體的需求選擇合適的方式來(lái)啟動(dòng)協(xié)程
by lazy
懶加載
lateinit
延遲加載
::myVariable.isInitialized
::myVariable.isInitialized 的工作原理是獲取變量 myVariable 的引用,然后訪問(wèn)它的 isInitialized 屬性。:: 運(yùn)算符返回的是一個(gè)引用,而不是變量本身,因此不會(huì)觸發(fā)對(duì)變量的訪問(wèn),也就不會(huì)拋出異常。- 判斷延遲加載是否初始化
suspend關(guān)鍵詞
* `suspend` 關(guān)鍵字用于聲明一個(gè)掛起函數(shù)。掛起函數(shù)可以在協(xié)程中使用,它允許協(xié)程在等待異步操作完成時(shí)暫停執(zhí)行。 * 掛起函數(shù)必須在協(xié)程作用域內(nèi)調(diào)用。協(xié)程作用域可以使用 `runBlocking`、`launch` 或 `async` 函數(shù)創(chuàng)建。 * 掛起函數(shù)可以使用 `await` 關(guān)鍵字來(lái)等待異步操作完成。`await` 關(guān)鍵字會(huì)暫停協(xié)程的執(zhí)行,直到異步操作完成。 * 掛起函數(shù)還可以使用 `yield` 關(guān)鍵字來(lái)暫停協(xié)程的執(zhí)行。`yield` 關(guān)鍵字會(huì)暫停協(xié)程的執(zhí)行,并返回一個(gè)值。當(dāng)協(xié)程再次恢復(fù)執(zhí)行時(shí),它將從 `yield` 關(guān)鍵字處繼續(xù)執(zhí)行。
協(xié)程
創(chuàng)建協(xié)程不會(huì)創(chuàng)建線(xiàn)程。協(xié)程是在現(xiàn)有的線(xiàn)程上運(yùn)行的。這意味著協(xié)程可以比線(xiàn)程更有效地利用系統(tǒng)資源。 以下是一些協(xié)程和線(xiàn)程的具體區(qū)別: 特性? ? ? ? ? ? ? ? ? ? 協(xié)程? ? ?線(xiàn)程 創(chuàng)建和銷(xiāo)毀開(kāi)銷(xiāo)?? ?小? ? ? 大 執(zhí)行方式? ? ? ? ? ?合作式?? 搶占式 調(diào)度方式?? ?基于事件循環(huán)?? ?基于時(shí)間片 資源利用率?? ?高?? ?低
viewModelScope、liveCycleScope與livedata builder
https://medium.com/@alice.margatroid.love/%E7%AD%86%E8%A8%98-coroutine%E7%B0%A1%E4%BB%8B-%E4%B8%89-viewmodelscope-livecyclescope%E8%88%87livedata-builder-e8be67aade8
private fun continueDetect(resultCallback:(Pair
private val resultCallback = { result: List
LaunchedEffect 在Compose中啟動(dòng)協(xié)程
它允許你在 Composable 函數(shù)中啟動(dòng)一個(gè)協(xié)程,并確保協(xié)程在 Composable 重組時(shí)能夠正確地處理。
kotlin圖數(shù)據(jù)結(jié)構(gòu)
Kotlin 標(biāo)準(zhǔn)庫(kù)中沒(méi)有提供 graph 圖形結(jié)構(gòu),但有許多第三方庫(kù)可以用來(lái)表示和操作圖。其中一些最受歡迎的庫(kù)包括: jgrapht:jgrapht 是一個(gè)功能齊全的圖庫(kù),它提供了各種算法和數(shù)據(jù)結(jié)構(gòu)來(lái)表示和操作圖。它支持有向圖和無(wú)向圖,并提供了許多有用的功能,如深度優(yōu)先搜索、廣度優(yōu)先搜索、最短路徑計(jì)算等。 kotlin-graph:kotlin-graph 是一個(gè)輕量級(jí)的圖庫(kù),它提供了基本的數(shù)據(jù)結(jié)構(gòu)和算法來(lái)表示和操作圖。它支持有向圖和無(wú)向圖,并提供了深度優(yōu)先搜索、廣度優(yōu)先搜索、拓?fù)渑判虻人惴ā?networkx:networkx 是一個(gè)功能強(qiáng)大的圖庫(kù),它提供了豐富的算法和數(shù)據(jù)結(jié)構(gòu)來(lái)表示和操作圖。它支持有向圖和無(wú)向圖,并提供了許多有用的功能,如社區(qū)檢測(cè)、中心性度量、最短路徑計(jì)算等。 graphlib:graphlib 是一個(gè)輕量級(jí)的圖庫(kù),它提供了基本的數(shù)據(jù)結(jié)構(gòu)和算法來(lái)表示和操作圖。它支持有向圖和無(wú)向圖,并提供了深度優(yōu)先搜索、廣度優(yōu)先搜索、拓?fù)渑判虻人惴ā?這些庫(kù)都可以用來(lái)表示和操作圖,但它們各有優(yōu)缺點(diǎn)。jgrapht 是一個(gè)功能齊全的庫(kù),但它可能有點(diǎn)復(fù)雜。kotlin-graph 和 graphlib 是輕量級(jí)的庫(kù),但它們可能缺乏一些高級(jí)功能。n
柚子快報(bào)激活碼778899分享:android Kotlin
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。