Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jetpack Compose, READY FOR PRODUCTION?

Max
July 17, 2021

Jetpack Compose, READY FOR PRODUCTION?

Max

July 17, 2021
Tweet

More Decks by Max

Other Decks in Technology

Transcript

  1. План • Что не так с Android View • Что

    такое Compose • Что меняется в разработке • Текущие проблемы Compose • Будущее Compose
  2. HelloWorldActivity.kt class MainActivity : ComponentActivity(R.layout.activity_main) { private lateinit var textView:

    TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) textView = findViewById(R.id.text) setGreeting("Android") } fun setGreeting(name: String) { textView.text = "Hello, $name” } }
  3. Особенности Android View • Разные языки для вёрстки (XML) и

    бизнес логики (Java/Kotlin) • View хранит параметры (set методы + атрибуты) • Зависимость от платформы • Высокая сложность создания собственных View • Синхронное API с вызовами только с главного/UI потока • Много кода в View (30к+ строк в Android 11)
  4. MainActivity.kt class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?)

    { super.onCreate(savedInstanceState) setContent { MyApplicationTheme { Surface(color = MaterialTheme.colors.background) { Greeting("Android") } } } } } @Composable fun Greeting(name: String) { Text( text = "Hello $name!", style = MaterialTheme.typography.h5 ) }
  5. Концепции Jetpack Compose • Декларативный (описывается только результат) • Единый

    язык логики и UI (Kotlin) • Можно использовать фишки Kotlin • Не зависит от платформы • Асинхронное построение UI
  6. Списки LazyColumn(modifier = Modifier.fillMaxSize()) { items( items = characters, key

    = { character -> character.id } ) { character -> CharacterListItem( character = character, onCharacterClicked = { onItemClicked(character) } ) } }
  7. Производительность • Не нужно парсить XML • Оптимизация кода R8/ProGuard

    • Асинхронное и многопоточное построение UI
  8. Библиотеки Jetpack с поддержкой Compose • Navigation • Activity •

    Paging 3 • ViewModel • Hilt • Material • Wear (Preview) • Widgets (Preview)
  9. Недостатки • Привязка к версии Kotlin • Не все виджеты

    есть в Compose • Не является нативным, а лишь его имитация • Lazy списки уступают по производительности RecyclerView • Нет поддержки ViewModel в превью IDE • minSdk=21
  10. Преимущества • minSdk=21 • Один язык для всего • Coroutine

    • Не стоит заботиться о вложенности • Возможность оптимизировать UI код (R8/ProGuard) • Независимость от версии Android • Обратная совместимость
  11. Особенности Android View • Разные языки для вёрстки (XML) и

    бизнес логики (Java/Kotlin) • View хранит параметры (set методы + атрибуты) • Зависимость от платформы • Высокая сложность создания собственных View • Синхронное API с вызовами только с главного/UI потока • Много кода в View (30к+ строк в Android 11)