Разработка современных мобильных приложений под Android презентация

Содержание

Kotlin Instant app Room

Слайд 1
“Разработка современных мобильных приложений под Android”
Панчуков Михаил
Точка кипения°


Слайд 2
Kotlin


Instant app
Room


Слайд 3
Kotlin


Слайд 4

“Now official”
Подробнее: https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/


Слайд 5Статически типизированный язык
“Null safety”
100% совместим с Java
Прост в изучении
Встроенная поддержка начиная

с Android Studio 3.0




Kotlin



Слайд 6Java
Button b = view.findViewById(R.id.btn1);
b.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View

view) {
//your action
}
});


Лаконичность


Kotlin
val b: Button = findViewById(R.id.btn1)
b.setOnClickListener{
//your action
}
// или вместе с kotlin android extensions btn1.setOnClickListener{
//your action
}




Подробнее: https://kotlinlang.org/docs/tutorials/android-plugin.html


Слайд 7data class Book(var title: String, var price: Int)
equals() и hashCode()
toString() в

виде “Book(title=Kotlin in Action, price=1000)”
copy()
componentN() для удобной деструкторизации класса
val (title, price) = book



Data-классы

Подробнее: https://kotlinlang.org/docs/reference/data-classes.html


Слайд 8fun Activity.byId(@IdRes id: Int): T = findViewById(id)
// вызов
val

btn = byId

Слайд 9val books = listOf(
Book("Kotlin in Action", 1000),

Book("Programming Kotlin", 1500)
)
books.sortBy { it.price }.forEach{ it.price += 100 }



Extension функции



Слайд 10Ctrl+Shift+Alt+K


Поддержка в Android Studio
Подробнее: https://developer.android.com/kotlin/get-started.html


Слайд 11public class Book {
private String title;
private Integer

price;

public Book(String title, Integer price) {
this.title = title;
this.price = price;
}

private Integer getPriceWithDiscount(Integer discountSize) {
return price - discountSize;
}

public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public Integer getPrice() { return price;}
public void setPrice(Integer price) { this.price = price }
}




Поддержка в Android Studio

Подробнее: https://developer.android.com/kotlin/get-started.html


Слайд 12class Book(var title: String?, var price: Int?) {

private fun

getPriceWithDiscount(discountSize: Int?): Int {
return price!! - discountSize!!
}
}

//Но можно и лучше

class Book(var title: String?, var price: Int?) {
private fun getPriceWithDiscount(discountSize: Int?): Int = price!! - discountSize!!
}



Поддержка в Android Studio

Подробнее: https://developer.android.com/kotlin/get-started.html


Слайд 13возможность декомпилировать код и посмотреть его в байт коде или на

Java
Menu > Tools > Kotlin > Show Kotlin Bytecode > Decompile
множество подсказок компилятора



Поддержка в Android Studio

Подробнее: https://developer.android.com/kotlin/get-started.html


Слайд 14Небольшое число книг, особенно на русском (всего 6)
Увеличение размера apk: к

debug apk прибавляется ~ 7,000 методов и +1 Mb к итоговому размеру
Увеличение времени компиляции (особенно при использовании kapt)



Минусы


Слайд 16Основные компоненты Room:
Database
Entity
DAO


Room


Слайд 17Добавьте следующие Gradle зависимости:
compile 'android.arch.persistence.room:runtime:1.0.0'
// при работе с RxJava
compile 'android.arch.persistence.room:rxjava2:1.0.0'
//при использовании

Kotlin
kapt 'android.arch.persistence.room:compiler:1.0.0'
//при использовании Java
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'



Room - подключение



Слайд 18@Entity(tableName = "book")
data class Book(
@PrimaryKey(autoGenerate = true)

var id: Long,
var title: String,
@ColumnInfo(name = "page_count")
var pageCount: Int
)



Entity



Слайд 19Также поддерживаются следующие аннотации:
@Ignore - поле, с такой аннотацией не сохраняется

в БД
@Embeded - позволяет сохранять в БД вложенные классы
@ForeignKey - позволяет определить внешний ключ для другой таблицы в БД



Entity



Слайд 20@Dao
interface BookDao{
@Query("SELECT * FROM book")
fun getAll(): List

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertBook(book: Book)

@Update
fun updateBook(book: Book)

@Delete
fun delete(book: Book)
}



DAO



Слайд 21Простой запрос с параметрами:
@Dao
interface BookDao{
@Query("SELECT * FROM book WHERE

page_count == :pageCount")
fun getBookByPageCount(pageCount: Int): List
}




DAO



Слайд 22java.lang.IllegalStateException
Cannot access database on the main thread

since it may potentially lock the UI for a
long period of time



DAO



Слайд 23Есть встроенная поддержка RxJava и Android LiveData
@Query("SELECT * FROM book WHERE

id = :id")
Asynchronous queries
fun getBookById(id: Long): Maybe
fun getBookById(id: Long): Single
Observable queries
fun getBookById(id: Long): LiveData
fun getBookById(id: Long): Flowable



DAO



Слайд 24@Database(entities = arrayOf(Book::class), version = 1)
abstract class App1Database: RoomDatabase(){
abstract

fun bookDao(): BookDao
}

val bookDb = Room.databaseBuilder(applicationContext, App1Database::class.java, "book-database").build()




Database



Слайд 25Предположим, вам нужно добавить новое поле в модель класса Book:
@Entity(tableName =

"book")
data class Book(
//…
var description:String,
//…
}



Миграции



Слайд 26Повысить версию БД
@Database(entities = arrayOf(Book::class), version = 2)
abstract class AppDatabase: RoomDatabase(){
//…
Добавить

в класс БД статическое поле с нашей миграцией
companion object {
@JvmField
val MIGRATION_1_2 = Migration1To2()
}



Миграции



Слайд 273) Определить класс миграции, расширяющий класс Migrate
class Migration1To2 : Migration(1,2) {

override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALERT TABLE book" +
"ADD COLUMN description STRING")
}
}
4) Добавить миграцию как параметр в databaseBuilder:
Room.databaseBuilder(applicationContext, App1Database::class.java, "book-database")
.addMigrations(MIGRATION_1_2)
.build()




Миграции



Слайд 28Меньше "boilerplate" кода*
Проверка запросов к базе данных во время компиляции
Простые миграции
Запрет

на работу с БД в главном потоке



Итоги

boilerplate - шаблонный, повторяющийся код


Слайд 29
Instant app


Слайд 30Сейчас:


Новый способ поиска приложений




Поиск
Установка
Использование


Слайд 31Instant app - возможность скачать только нужную Вам функцию, а не

всё приложение целиком.



Что такое Instant app



Слайд 32Android 5.0 (API level 21) +


Поддержка


Слайд 33Android Studio 3 и новее
Самые новые версии Google Support Library
Instant Apps

Development SDK



Требования



Слайд 34Ограниченный набор доступных разрешений
Все запросы из приложения должны идти по https
Приложения

проверяются значительно жестче
Если нужна



Ограничения

Подробнее: https://developer.android.com/topic/instant-apps/faqs.html
https://developers.google.com/identity/smartlock-passwords/android/


Слайд 35Каждый apk: -
это одна activity
это одно законченное действие
не более 4Mb


“Приложение как

фича”



Слайд 36

Использование

Base feature module
apply plugin: 'com.android.feature'
android {

...
baseFeature true
...
}

Instant app module
apply plugin: 'com.android.instantapp'
...
dependencies {
implementation project(':base')
// if there additional features, they go here
implementation project(':feature1')
}



Слайд 37
Kotlin


Instant app
Room


Слайд 38
Пишите talents@tochkak.ru


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика