Forwarded from Android Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
Интервью с Аркадием Ивановым, автором популярных библиотек Decompose и MVIKotlin, про open source, жизнь в Англии, будущее Kotlin Multiplatform.
#AndroidBroadcast #видео #kmp #decompose #mvikotlin #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍7👎2
Forwarded from Android Broadcast
В новом видео показываю как настроить публикации для Android и Kotlin Multiplatform библиотеки в Gradle с новым механизмом подписи артефактов для Maven Central в 2024
#AndroidBroadcast #видео #gradle #maven #kmp #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍4
Чтоб скрыть детали реализации внутри библиотеки, иногда авторы используют классы с внутренней реализацией. Я такой подход использовал в ViewBindingPropertyDelegate для сокрытия реализации и отказа от if:
Если бы я не использовал внутреннюю реализацию, то подход был бы такой:
Подобный подход используют в KMP, например Jetpack ViewModel. Также скрываются реализации различных lazy делегатов в Kotlin, но через фасад метода с параметром
#kotlin #AndroidBroadcast #БазаЗнаний
public object ViewBindingCache {
private var impl: ViewBindingCacheImpl = ViewBindingCacheImpl.Noop
internal fun <T : ViewBinding> getInflateWithLayoutInflater(
viewBindingClass: Class<T>
): InflateViewBinding<T> {
return impl.getInflateWithLayoutInflater(viewBindingClass)
}
internal fun <T : ViewBinding> getBind(
viewBindingClass: Class<T>
): BindViewBinding<T> {
return impl.getBind(viewBindingClass)
}
public fun clear() {
impl.clear()
}
public fun setEnabled(enabled: Boolean) {
impl = if (enabled) ViewBindingCacheImpl.Default() else ViewBindingCacheImpl.Noop
}
}
private sealed interface ViewBindingCacheImpl {
class Default : ViewBindingCacheImpl { ... }
data object Noop : ViewBindingCacheImpl
}
Если бы я не использовал внутреннюю реализацию, то подход был бы такой:
public object ViewBindingCache {
private var cacheEnabled = false
private val cache = mutableMapOf<...>()
internal fun <T : ViewBinding> getInflateWithLayoutInflater(
viewBindingClass: Class<T>
): InflateViewBinding<T> {
if (cacheEnabled) {
return ...
} else {
return ...
}
}
internal fun <T : ViewBinding> getBind(
viewBindingClass: Class<T>
): BindViewBinding<T> {
if (cacheEnabled) {
return ...
} else {
return ...
}
}
public fun clear() {
...
}
public fun setEnabled(enabled: Boolean) {
cache.clear()
this.cacheEnabled = enabled
}
}
Подобный подход используют в KMP, например Jetpack ViewModel. Также скрываются реализации различных lazy делегатов в Kotlin, но через фасад метода с параметром
fun <T> lazy(mode: LazyThreadSafetyMode, initializer: () -> T): Lazy<T>
#kotlin #AndroidBroadcast #БазаЗнаний
🔥12👍7