Android KTX Android Jetpack'in bir parçasıdır.

Android KTX, Android'e dahil olan bir dizi Kotlin uzantısıdır Jetpack ve diğer Android kitaplıkları. KTX uzantıları kısa ve öz, Kotlin'den Jetpack'e, Android platformuna ve diğer API'lere. Bunu yapmak için Uzantılar, aşağıdakiler de dahil olmak üzere çeşitli Kotlin dili özelliklerinden yararlanır:

  • Uzantı işlevleri
  • Uzantı özellikleri
  • Lambda
  • Adlandırılmış parametreler
  • Parametre varsayılan değerleri
  • Eş yordamlar

Örneğin bir kurumda SharedPreferences düzenleyici oluşturun . Ayrıca veya aşağıda gösterildiği gibi, düzenlemeyi bitirdiğinizde bu değişiklikleri uygulayabilirsiniz örnek:

sharedPreferences
        .edit()  // create an Editor
        .putBoolean("key", value)
        .apply() // write to disk asynchronously

Kotlin lambda'ları bu kullanım alanı için mükemmel bir seçim. Projedeki görevlerin daha kısa ve öz bir yaklaşım benimseyerek yürütülecek bir kod bloğu kodu yürütülmesine izin vermek ve ardından SharedPreferences API'sinin nasıl uygulayacağımızı göreceğiz.

Android KTX Core işlevlerinden birine ilişkin bir örneği burada bulabilirsiniz: SharedPreferences.edit Bu işlem, SharedPreferences öğesine bir düzenleme işlevi ekler. Bu işlev, kaydedilip kaydedilmeyeceğini belirten ilk bağımsız değişkeni olarak isteğe bağlı boolean işaretini veya değişiklikleri uygulayabilirsiniz. Ayrıca, Lambda biçimindeki SharedPreferences düzenleyici.

// SharedPreferences.edit extension function signature from Android KTX - Core
// inline fun SharedPreferences.edit(
//         commit: Boolean = false,
//         action: SharedPreferences.Editor.() -> Unit)

// Commit a new value asynchronously
sharedPreferences.edit { putBoolean("key", value) }

// Commit a new value synchronously
sharedPreferences.edit(commit = true) { putBoolean("key", value) }

Arayan, değişiklikleri uygulamayı veya uygulamayı seçebilir. action lambda, SharedPreferences.Editor üzerindeki anonim bir uzantı işlevidir İmzasında belirtildiği gibi Unit değerini döndürür. Bu nedenle, bu işlemi doğrudan yapı ve SharedPreferences.Editor

Son olarak, SharedPreferences.edit() imzası inline anahtar kelimesini içerir. Bu anahtar kelime, Kotlin derleyicisine kopyalayıp yapıştırmasını (veya satır içi) ekleyebilirsiniz. Bu sayede, her action için yeni bir sınıf oluşturma ek yükünü ortadan kaldırır çağrısının tekrar yapıldığından emin olun.

Lambdas kullanarak kod aktarma kalıbı, geçersiz kılınır ve bu davranışlar inline kullanılarak mevcut API'lere eklenir. uzantı işlevleri Android KTX tarafından sağlanan geliştirmelerin tipik bir örneğidir kitaplığını açar.

Projenizde Android KTX'i kullanma

Android KTX'i kullanmaya başlamak için aşağıdaki bağımlılığı projenizin build.gradle dosyası:

Eski

repositories {
    google()
}

Kotlin

repositories {
    google()
}

AndroidX Modülleri

Android KTX, her modül bir veya daha fazla modül içeren modüller halinde düzenlenmiştir pakettir.

Uygulamanızın build.gradle dosyası yükleyin. Yapıya sürüm numarasını eklemeyi unutmayın. En son sürüm numaralarını her yapının ilgili bölümünde bulabilirsiniz daha fazla bilgi edineceksiniz.

Android KTX, Kotlin sağlayan tek çekirdekli bir modül içerir ortak çerçeve API'leri ve alana özgü çeşitli uzantılar için yeni uzantılar ekleyin.

Temel modül dışında tüm KTX modülü yapıları, build.gradle dosyanızdaki temel Java bağımlılığı. Örneğin, şunları yapabilirsiniz: bir androidx.fragment:fragment bağımlılığını şununla değiştirin: androidx.fragment:fragment-ktx. Bu söz dizimi, verilerin daha iyi yönetilmesini ve ek bağımlılık bildirimi gereksinimleri eklemez.

Çekirdek KTX

Core KTX modülü, ortaya koyduk. Bu kitaplıkların aynı zamanda build.gradle grubuna eklemeniz gerekiyor.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.core:core-ktx:1.13.1"
}

Kotlin

dependencies {
    implementation("androidx.core:core-ktx:1.13.1")
}

Core KTX modülünde bulunan paketlerin listesi aşağıda verilmiştir:

KTX koleksiyonu

Koleksiyon uzantıları, Android'in web sürümleri ile çalışırken ArrayMap, LongSparseArray, LruCache ve diğerleri.

Bu modülü kullanmak için uygulamanızın build.gradle dosyasına şunu ekleyin:

Eski

dependencies {
    implementation "androidx.collection:collection-ktx:1.4.4"
}

Kotlin

dependencies {
    implementation("androidx.collection:collection-ktx:1.4.4")
}

Koleksiyon uzantıları, tek bir varlık göstermek için Kotlin’in operatör aşırı yüklemesinden yararlanır. aşağıda gösterildiği gibi, toplama birleştirme gibi işlemleri basitleştirme örnek:

// Combine 2 ArraySets into 1.
val combinedArraySet = arraySetOf(1, 2, 3) + arraySetOf(4, 5, 6)

// Combine with numbers to create a new sets.
val newArraySet = combinedArraySet + 7 + 8

KTX parçası

İlgili içeriği oluşturmak için kullanılan Parça KTX modülü fragman API'sini basitleştirmek için bir dizi uzantı sunar.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.fragment:fragment-ktx:1.8.3"
}

Kotlin

dependencies {
    implementation("androidx.fragment:fragment-ktx:1.8.3")
}

Fragment KTX modülüyle, parça işlemlerini sadeleştirmek için örneğin,

fragmentManager().commit {
   addToBackStack("...")
   setCustomAnimations(
           R.anim.enter_anim,
           R.anim.exit_anim)
   add(fragment, "...")
}

Ayrıca, tek satırdaki bir ViewModel öğesini viewModels ve activityViewModels mülk için yetki verilmiş kullanıcı:

// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()

// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()

Yaşam döngüsü KTX

Yaşam döngüsü KTX'i her biri için bir LifecycleScope tanımlar Lifecycle nesnesini ifade eder. Herhangi bir eş yordam Lifecycle kaldırıldığında bu kapsamdaki başlatma işlemi iptal edilir. Şunları yapabilirsiniz: Lifecycle öğesinin CoroutineScope içine şunu kullanarak erişebilirsiniz: lifecycle.coroutineScope veya lifecycleOwner.lifecycleScope mülkleri.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.5"
}

Kotlin

dependencies {
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.5")
}

Aşağıdaki örnekte, lifecycleOwner.lifecycleScope işlevinin nasıl kullanılacağı gösterilmektedir önceden hesaplanmış metni eşzamansız olarak oluşturma:

class MyFragment: Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewLifecycleOwner.lifecycleScope.launch {
            val params = TextViewCompat.getTextMetricsParams(textView)
            val precomputedText = withContext(Dispatchers.Default) {
                PrecomputedTextCompat.create(longTextContent, params)
            }
            TextViewCompat.setPrecomputedText(textView, precomputedText)
        }
    }
}

LiveData KTX

LiveData kullanırken değerleri eşzamansız olarak hesaplamanız gerekebilir. Örneğin, bir kullanıcının tercihlerini almak ve bunları kendi Kullanıcı arayüzü. LiveData KTX, bu durumlarda bir liveData oluşturucu işlevi sağlar. bir suspend işlevini çağırır ve sonucu bir LiveData nesnesi olarak sunar.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.6"
}

Kotlin

dependencies {
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.6")
}

Aşağıdaki örnekte loadUser(), başka bir yerde tanımlanan askıya alma işlevidir. loadUser() öğesini eşzamansız olarak çağırmak için liveData oluşturucu işlevini kullanabilirsiniz. ve ardından sonucu yayınlamak için emit() işlevini kullanın:

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

LiveData ile eş yordamların kullanımı hakkında daha fazla bilgi için bkz. Mimari bileşenleriyle Kotlin eş yordamlarını kullanın.

Navigasyon kitaplığının her bileşeninin API'lerin daha kısa ve Kotlin idiyomatik olması.

Bu modülleri dahil etmek için uygulamanızın build.gradle dosyasına aşağıdakileri ekleyin:

Eski

dependencies {
    implementation "androidx.navigation:navigation-runtime-ktx:2.8.1"
    implementation "androidx.navigation:navigation-fragment-ktx:2.8.1"
    implementation "androidx.navigation:navigation-ui-ktx:2.8.1"
}

Kotlin

dependencies {
    implementation("androidx.navigation:navigation-runtime-ktx:2.8.1")
    implementation("androidx.navigation:navigation-fragment-ktx:2.8.1")
    implementation("androidx.navigation:navigation-ui-ktx:2.8.1")
}

Hedefe erişmek için uzantı işlevlerini ve mülk yetkilendirmesini kullanın bağımsız değişkenlerine ve hedeflere gidin:

class MyDestination : Fragment() {

    // Type-safe arguments are accessed from the bundle.
    val args by navArgs<MyDestinationArgs>()

    ...
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        view.findViewById<Button>(R.id.next)
            .setOnClickListener {
                // Fragment extension added to retrieve a NavController from
                // any destination.
                findNavController().navigate(R.id.action_to_next_destination)
            }
     }
     ...

}

Palet KTX

İlgili içeriği oluşturmak için kullanılan Palet KTX modülü renk paletleriyle çalışmak için deyimsel Kotlin desteği sunar.

Bu modülü kullanmak için uygulamanızın build.gradle dosyasına şunu ekleyin:

Eski

dependencies {
    implementation "androidx.palette:palette-ktx:1.0.0"
}

Kotlin

dependencies {
    implementation("androidx.palette:palette-ktx:1.0.0")
}

Örneğin, bir Palette örneğiyle çalışırken, geri almak için Get operatörünü ([ ]) kullanarak belirli bir target için selected kartelası:

val palette = Palette.from(bitmap).generate()
val swatch = palette[target]

Reaktif Akışlar KTX

Reaktif Akışlar KTX modülü, şuradan gözlemlenebilir bir LiveData akışı oluşturmanıza olanak tanır: ReactiveStreams yayıncısıyım.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.5"
}

Kotlin

dependencies {
    implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:2.8.5")
}

Örnek olarak, az sayıda kullanıcı içeren bir veritabanını ele alalım. Uygulamanızda Veritabanını belleğe yükleyip kullanıcı verilerini kullanıcı arayüzünde görüntüleyin. Hedef Bunun için RxJava'yı kullanabilirsiniz. Room Jetpack bileşeni, Flowable olarak ayarlanır. Bu senaryoda, Rx'i de yönetmeniz gerekir. parçanızın veya etkinliğinizin ömrü boyunca yayıncı aboneliğinizin olmasını sağlayabilirsiniz.

Ancak LiveDataReactiveStreams ile RxJava ve zengin operatör kümesi ve iş planlama becerileri içerirken aşağıdaki örnekte gösterildiği gibi LiveData basitliği:

val fun getUsersLiveData() : LiveData<List<User>> {
    val users: Flowable<List<User>> = dao.findUsers()
    return LiveDataReactiveStreams.fromPublisher(users)
}

Oda KTX'i

Oda uzantıları, veritabanı işlemleri için eş yordam desteği ekler.

Bu modülü kullanmak için uygulamanızın build.gradle dosyasına şunu ekleyin:

Eski

dependencies {
    implementation "androidx.room:room-ktx:2.6.1"
}

Kotlin

dependencies {
    implementation("androidx.room:room-ktx:2.6.1")
}

Aşağıda, Room'da eş yordamların kullanıldığı birkaç örnek verilmiştir. İlk örnek User nesnenin listesini döndürmek için bir suspend işlevi kullanırken, ikinci Kotlin'in Flow özelliğini kullanır User listesini eşzamansız olarak döndürmek için kullanılır. Flow kullanırken Ayrıca, sorguladığınız tablolardaki değişikliklerle ilgili bildirimde de bulunabilirsiniz.

@Query("SELECT * FROM Users")
suspend fun getUsers(): List<User>

@Query("SELECT * FROM Users")
fun getUsers(): Flow<List<User>>

SQLite KTX

SQLite uzantıları, işlemlerde SQL ile ilgili kodları sarmalayarak birçok ortak metin kodudur.

Bu modülü kullanmak için uygulamanızın build.gradle dosyasına şunu ekleyin:

Eski

dependencies {
    implementation "androidx.sqlite:sqlite-ktx:2.4.0"
}

Kotlin

dependencies {
    implementation("androidx.sqlite:sqlite-ktx:2.4.0")
}

Veritabanı gerçekleştirmek için transaction uzantısını kullanmanın bir örneğini aşağıda bulabilirsiniz işlem:

db.transaction {
    // insert data
}

ViewModel KTX

ViewModel KTX kitaplığı, aşağıdakileri yapan bir viewModelScope() işlevi sağlar: ViewModel cihazınızdan eş yordamları başlatmak daha kolaydır. İlgili içeriği oluşturmak için kullanılan CoroutineScope Dispatchers.Main adresine bağlıdır ve otomatik olarak iptal edilir ViewModel temizlendiğinde. viewModelScope() yerine şunu kullanabilirsiniz: her ViewModel için yeni bir kapsam oluşturarak.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5"
}

Kotlin

dependencies {
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.5")
}

Örneğin, aşağıdaki viewModelScope() işlevi bir eş yordam başlatır arka plan iş parçacığında ağ isteği gönderen bir kod oluşturur. Kitaplıkta sunulan adımları takip etmeniz gerekir:

class MainViewModel : ViewModel() {
    // Make a network request without blocking the UI thread
    private fun makeNetworkRequest() {
        // launch a coroutine in viewModelScope
        viewModelScope.launch  {
            remoteApi.slowFetch()
            ...
        }
    }

    // No need to override onCleared()
}

WorkManager KTX'i

WorkManager KTX, eş yordamlar için birinci sınıf destek sağlar.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "androidx.work:work-runtime-ktx:2.9.1"
}

Kotlin

dependencies {
    implementation("androidx.work:work-runtime-ktx:2.9.1")
}

Worker alanını uzatmak yerine artık şunları yapabilirsiniz: uzat CoroutineWorker, Bu API'nin API'si biraz daha farklıdır. Örneğin basit bir CoroutineWorker ile bazı ağ işlemlerini gerçekleştirebilirsiniz:

class CoroutineDownloadWorker(context: Context, params: WorkerParameters)
        : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result = coroutineScope {
        val jobs = (0 until 100).map {
            async {
                downloadSynchronously("https://www.google.com")
            }
        }

        // awaitAll will throw an exception if a download fails, which
        // CoroutineWorker will treat as a failure
        jobs.awaitAll()
        Result.success()
    }
}

CoroutineWorker kullanımıyla ilgili daha fazla bilgi için bkz. CooutineWorker'da ileti dizisi oluşturma.

WorkManager KTX, aynı zamanda Operations ve Geçerli eş yordamı askıya almak için ListenableFutures.

Şu örneği inceleyin: Operation enqueue():

// Inside of a coroutine...

// Run async operation and suspend until completed.
WorkManager.getInstance()
        .beginWith(longWorkRequest)
        .enqueue().await()

// Resume after work completes...

Diğer KTX modülleri

AndroidX'in dışında bulunan başka KTX modüllerini de ekleyebilirsiniz.

Firebase KTX

Android için Firebase SDK'larının bazılarında Uygulamanızda Firebase kullanırken deyimsel Kotlin kodu yazmanızı sağlar. Örneğin, daha fazla bilgi için aşağıdaki konulara bakın:

Google Haritalar Platformu KTX

Google Haritalar Platformu Android SDK'ları için kullanılabilen KTX uzantıları uzantı gibi çeşitli Kotlin dili özelliklerinden fonksiyonlar, adlandırılmış parametreler ve varsayılan bağımsız değişkenler, bildirimleri yok etme, eş yordamlardan oluşur. Daha fazla bilgi için aşağıdaki konulara bakın:

Play Core KTX

Play Core KTX, tek seferlik istekler ve Akış için Kotlin eş yordamları desteğini ekledi durum güncellemelerini izlemek için Play Core kitaplığında SplitInstallManager ve AppUpdateManager.

Bu modülü dahil etmek için aşağıdaki kodu uygulamanızın build.gradle dosyasına ekleyin:

Eski

dependencies {
    implementation "com.google.android.play:core-ktx:1.8.1"
}

Kotlin

dependencies {
    implementation("com.google.android.play:core-ktx:1.8.1")
}

Flow durum izleme örneği:

// Inside of a coroutine...

// Request in-app update status updates.
manager.requestUpdateFlow().collect { updateResult ->
    when (updateResult) {
        is AppUpdateResult.Available -> TODO()
        is AppUpdateResult.InProgress -> TODO()
        is AppUpdateResult.Downloaded -> TODO()
        AppUpdateResult.NotAvailable -> TODO()
    }
}

Daha fazla bilgi

Android KTX hakkında daha fazla bilgi edinmek için DevBytes videosunu izleyin.

Bir sorunu bildirmek veya özellik önermek için şunu kullanın: Android KTX sorun izleyici.