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

Jetpack Compose, READY FOR PRODUCTION?

Avatar for Max Max
July 17, 2021

Jetpack Compose, READY FOR PRODUCTION?

Avatar for Max

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)