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:
- androidx.core.animation
- androidx.core.content
- androidx.core.content.res
- androidx.core.database
- androidx.core.database.sqlite
- androidx.core.graphics
- androidx.core.graphics.drawable
- androidx.core.location
- androidx.core.net
- androidx.core.os
- androidx.core.text
- androidx.core.transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
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.
KTX'te gezinme
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.