Slide 1

Slide 1 text

Android Jetpack Acelerando el desarrollo de tus apps Android Jorge Nogueiras nogueirasjn nogueiras Fabio Negri Fabio_negri fabionegri

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

• Acelera el desarrollo • Elimina el código estándar • Crea apps sólidas y de alta calidad Ventajas

Slide 5

Slide 5 text

Architecture Behaviour Foundation UI

Slide 6

Slide 6 text

Foundation

Slide 7

Slide 7 text

Behaviour

Slide 8

Slide 8 text

Architecture

Slide 9

Slide 9 text

UI

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Slide 13

Slide 13 text

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

fun navigateToNewGame() { navigation.navigate(R.id.action_start_to_new_game) } navigation = Navigation.findNavController(view)

Slide 16

Slide 16 text

, bundle navigation.navigate(R.id.action_start_to_new_game } fun navigateToNewGame(attacker: User) { navigation = Navigation.findNavController(view) val bundle = bundleOf("user" to attacker) )

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Slide 19

Slide 19 text

} fun navigateToNewGame(attacker: User) { navigation = Navigation.findNavController(view) val action = LoginFragmentDirections.actionStartToNewGame(attacker) navigation.navigate(action)

Slide 20

Slide 20 text

} fun navigateToNewGame(attacker: User) { navigation = Navigation.findNavController(view) val action = LoginFragmentDirections.actionStartToNewGame(attacker) navigation.navigate(action) intent?.extras?.let { val arguments = NewGameFragmentArgs.fromBundle(it) userLabel.text = arguments.user.username }

Slide 21

Slide 21 text

-keepnames class dev.nogueiras.presentation.User @Keep data class User(username: String) : Serializable

Slide 22

Slide 22 text

LiveData

Slide 23

Slide 23 text

• Nuestra UI siempre actualizada • Evita memory leaks y crashes • Permite compartir recursos

Slide 24

Slide 24 text

ViewModel

Slide 25

Slide 25 text

• Mantiene el estado de la vista • Bajo acoplamiento con la vista • Sobrevive a cambios de configuración (ej: Rotación de pantalla)

Slide 26

Slide 26 text

¿Cómo funciona el scope del ViewModel?

Slide 27

Slide 27 text

Room

Slide 28

Slide 28 text

Application Data Access Objects Room Database Obtener DAOs Leer Entidades Persistir cambios Entities Leer/Guardar campos

Slide 29

Slide 29 text

Entities @Entity(tableName = "users") data class User( val id: Long, val name: String ) @ColumnInfo(name = "id") @ColumnInfo(name = "name") @PrimaryKey

Slide 30

Slide 30 text

Data Access Objects interface UserDao { fun getAll(): List fun delete(user: User) } @Dao @Query("SELECT * FROM users") @Delete

Slide 31

Slide 31 text

Room Database @Database( version = 1, entities = [User::class] ) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }

Slide 32

Slide 32 text

// Ejecuto operación val allUsers = userDao.getAll() // Obtengo DAO val userDao = database.userDao() // Obtengo la base de datos val database = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "trivia-game-db" ).build() Application

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

http://developer.android.com/jetpack https://github.com/nogueirasjorge/navigation-example https://codelabs.developers.google.com/codelabs/android-navigation/ https://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin/ https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev