Видео. Architecture Components. Improve Your App's Design. Перевод субтитров.

Перевод английских субтитров на русские из видео Architecture Components: Improve Your App’s Design. Начало 01.09.2017, конец - 07.09.2017. All rights reserved.

Смотри другие переводы видео (субтитры) по этой теме: Tag: Architecture Components

Мой клон с русскими субтитрами:

Оригинальное видео:

Аннотация к видео:

  • Build robust Android apps using the new architecture components. New classes and interfaces, such as ViewModel, LiveData and LifecycleObserver, make it easy to access and manage the Activity and Fragment Lifecycle. Room, an object mapping library for SQLite, simplifies caching, loading and displaying your app’s data. Used together, you can quickly generate SQLite databases and get information into your app’s UI with far less boilerplate code, letting you focus on the code that makes your app unique.

Перевод:

  • Создавайте надежные приложения для Android, используя новые архитектурные компоненты. Новые классы и интерфейсы, такие как ViewModel, LiveData и LifecycleObserver, облегчают доступ к жизненному циклу Activity и Fragment и управлению ими. Room, object mapping library для SQLite, упрощает кэширование, загрузку и отображение данных вашего приложения. Используя все это, вы можете быстро создавать базы данных SQLite и получать информацию в UI вашего приложения с гораздо меньшим количеством шаблонного кода. Это позволяет вам сосредоточиться на коде, который делает ваше приложение уникальным.

Ссылки к видео:

Перевод субтитров
English Русский
1
00:00:00,000 --> 00:00:02,130
LYLA: In response
to popular demand,

2
00:00:02,130 --> 00:00:05,010
the Android Framework team has
written an opinionated guide

3
00:00:05,010 --> 00:00:06,960
to architecting Android
apps, and they've

4
00:00:06,960 --> 00:00:09,870
developed a companion set
of architecture components.

5
00:00:09,870 --> 00:00:12,960
Hi, my name's Lyla, a
developer advocate for Android,

6
00:00:12,960 --> 00:00:15,900
and I'm here to introduce you
to these shiny new architecture

7
00:00:15,900 --> 00:00:17,070
components.

8
00:00:17,070 --> 00:00:19,890
These components persist
data, manage lifecycle,

9
00:00:19,890 --> 00:00:22,860
make your app modular, help
you avoid memory leaks,

10
00:00:22,860 --> 00:00:26,430
and prevent you from having to
write boring boilerplate code.

11
00:00:26,430 --> 00:00:28,680
Your basic Android
app needs a database

12
00:00:28,680 --> 00:00:30,780
connected to a robust UI.

13
00:00:30,780 --> 00:00:33,890
The new components, Room,
ViewModel, LiveData,

14
00:00:33,890 --> 00:00:35,732
and Lifecycle, make that easy.

15
00:00:35,732 --> 00:00:38,190
They're also designed to fit
together like building blocks,

16
00:00:38,190 --> 00:00:39,690
so let's see how.

17
00:00:39,690 --> 00:00:42,990
I'll tackle the database using
Room, which is a new SQLite

18
00:00:42,990 --> 00:00:44,820
object mapping library.

19
00:00:44,820 --> 00:00:46,440
To set up the tables
using Room, we

20
00:00:46,440 --> 00:00:49,550
can define a Plain Old
Java Object, or a POJO.

21
00:00:49,550 --> 00:00:52,950
We then mark this POJO
with the @Entity annotation

22
00:00:52,950 --> 00:00:56,650
and create an ID marked with
the @PrimaryKey annotation.

23
00:00:56,650 --> 00:00:59,820
Now for each POJO, you need
to define a DAO, or a Database

24
00:00:59,820 --> 00:01:01,290
Access Object.

25
00:01:01,290 --> 00:01:03,130
The annotated methods
represent the SQLite

26
00:01:03,130 --> 00:01:05,950
commands that you need to
interact with your POJO's data.

27
00:01:05,950 --> 00:01:08,790
Now, take a look at this insert
method and this query method.

28
00:01:08,790 --> 00:01:11,400
Room has automatically
converted your POJO objects

29
00:01:11,400 --> 00:01:14,265
into the corresponding database
tables, and back again.

30
00:01:14,265 --> 00:01:17,130
Room also verifies your
SQLite at compile time.

31
00:01:17,130 --> 00:01:19,150
So if you spell something
a little bit wrong,

32
00:01:19,150 --> 00:01:21,150
or if you reference a
column that's not actually

33
00:01:21,150 --> 00:01:24,310
in the database, it will
throw a helpful error.

34
00:01:24,310 --> 00:01:26,070
Now that you have
a Room database,

35
00:01:26,070 --> 00:01:27,570
you can use another
new architecture

36
00:01:27,570 --> 00:01:30,210
component, called LiveData,
to monitor changes

37
00:01:30,210 --> 00:01:31,320
in the database.

38
00:01:31,320 --> 00:01:33,900
LiveData is an
observable data holder.

39
00:01:33,900 --> 00:01:35,910
That means it holds
data and notifies you

40
00:01:35,910 --> 00:01:39,090
with the data changes so
that you can update the UI.

41
00:01:39,090 --> 00:01:41,790
LiveData is an abstract
class that you can extend,

42
00:01:41,790 --> 00:01:45,600
or, for simple cases, you can
use the MutableLiveData class.

43
00:01:45,600 --> 00:01:47,730
If you update the value
of the MutableLiveData

44
00:01:47,730 --> 00:01:50,230
with a call to set value, it
could then trigger and update

45
00:01:50,230 --> 00:01:51,570
in your UI.

46
00:01:51,570 --> 00:01:53,170
What's even more
powerful though,

47
00:01:53,170 --> 00:01:55,680
is that Room is built
to support LiveData.

48
00:01:55,680 --> 00:01:58,080
To use them together,
you just modify your DAO

49
00:01:58,080 --> 00:02:00,450
to return objects that are
wrapped with the LiveData

50
00:02:00,450 --> 00:02:01,360
class.

51
00:02:01,360 --> 00:02:04,850
Room will create a LiveData
object observing the database.

52
00:02:04,850 --> 00:02:08,258
Then you could write code
like this to update your UI.

53
00:02:08,258 --> 00:02:10,959
The end result is that if
your Room database updates,

54
00:02:10,960 --> 00:02:13,410
it changes the data in
your LiveData object, which

55
00:02:13,410 --> 00:02:15,930
automatically
triggers UI updates.

56
00:02:15,930 --> 00:02:18,840
This brings me to another
awesome feature of LiveData.

57
00:02:18,840 --> 00:02:21,344
LiveData is a
lifecycle-aware component.

58
00:02:21,344 --> 00:02:23,010
Now, you might be
thinking, what exactly

59
00:02:23,010 --> 00:02:24,990
is a lifecycle-aware component?

60
00:02:24,990 --> 00:02:26,390
Well, I'm glad you asked.

61
00:02:26,390 --> 00:02:28,620
Through the magic of
lifecycle observation,

62
00:02:28,620 --> 00:02:31,160
LiveData knows when your
activity is on screen,

63
00:02:31,160 --> 00:02:34,200
off screen, or destroyed, so
that it doesn't send database

64
00:02:34,200 --> 00:02:36,600
updates to a non-active UI.

65
00:02:36,600 --> 00:02:38,520
There are two
interfaces for this--

66
00:02:38,520 --> 00:02:41,070
Lifecycle Owner and
Lifecycle Observer.

67
00:02:41,070 --> 00:02:43,200
Lifecycle Owners are
objects with lifecycles,

68
00:02:43,200 --> 00:02:44,820
like activities and fragments.

69
00:02:44,820 --> 00:02:46,620
Lifecycle Observers,
on the other hand,

70
00:02:46,620 --> 00:02:50,509
observe Lifecycle Owners and are
notified of lifecycle changes.

71
00:02:50,509 --> 00:02:52,050
Here's a quick peek
at the simplified

72
00:02:52,050 --> 00:02:55,770
code for LiveData, which is
also a Lifecycle Observer.

73
00:02:55,770 --> 00:02:58,890
The methods annotated
with @OnLifecycleEvent

74
00:02:58,890 --> 00:03:00,970
take care of initialization
and tear down

75
00:03:00,970 --> 00:03:04,350
when the associated Lifecycle
Owner starts and stops.

76
00:03:04,350 --> 00:03:07,530
This allows LiveData objects
to take care of their own setup

77
00:03:07,530 --> 00:03:09,690
and tear down, so
the UI components

78
00:03:09,690 --> 00:03:12,000
observe the LiveData, and
the LiveData components

79
00:03:12,000 --> 00:03:13,890
observe the Lifecycle Owners.

80
00:03:13,890 --> 00:03:16,380
As a side note to all you
Android library designers out

81
00:03:16,380 --> 00:03:19,350
there, you can use this exact
same lifecycle observation

82
00:03:19,350 --> 00:03:22,350
code to call setup and tear
down functions automatically

83
00:03:22,350 --> 00:03:24,240
for your own libraries.

84
00:03:24,240 --> 00:03:26,559
Now you still have one
more problem to solve.

85
00:03:26,559 --> 00:03:29,100
As your app is used, it will go
through various configuration

86
00:03:29,100 --> 00:03:32,070
changes that destroy and
rebuild the activity.

87
00:03:32,070 --> 00:03:34,800
We don't want to tie the
initialization of LiveData

88
00:03:34,800 --> 00:03:36,660
to the activity
lifecycle because that

89
00:03:36,660 --> 00:03:39,830
causes a lot of needlessly
re-executed code.

90
00:03:39,830 --> 00:03:41,910
An example of this is
your database query,

91
00:03:41,910 --> 00:03:44,820
which is executed every
time you rotate the phone.

92
00:03:44,820 --> 00:03:46,300
So what do you do?

93
00:03:46,300 --> 00:03:48,750
Well, you put your
LiveData and any other data

94
00:03:48,750 --> 00:03:52,230
associated with the UI
in a ViewModel instead.

95
00:03:52,230 --> 00:03:55,650
ViewModels are objects that
provide data for UI components

96
00:03:55,650 --> 00:03:57,750
and survive
configuration changes.

97
00:03:57,750 --> 00:04:01,500
To create a ViewModel object,
you extend the ViewModel class.

98
00:04:01,500 --> 00:04:03,450
You then put all of
the necessary data

99
00:04:03,450 --> 00:04:06,030
for your activity UI
into the ViewModel.

100
00:04:06,030 --> 00:04:08,850
Since you've cached data for
the UI inside of the ViewModel,

101
00:04:08,850 --> 00:04:10,590
your app won't
requery the database

102
00:04:10,590 --> 00:04:13,860
if your activity is recreated
due to a configuration change.

103
00:04:13,860 --> 00:04:16,140
Then, when you're creating
your activity or fragment,

104
00:04:16,140 --> 00:04:18,660
you can get a reference to
the ViewModel and use it.

105
00:04:18,660 --> 00:04:19,680
And that's it!

106
00:04:19,680 --> 00:04:21,269
The first time you
get a ViewModel,

107
00:04:21,269 --> 00:04:23,160
it's generated
for your activity.

108
00:04:23,160 --> 00:04:24,840
When you request
a ViewModel again,

109
00:04:24,840 --> 00:04:27,000
your activity receives
the original ViewModel

110
00:04:27,000 --> 00:04:28,980
with the UI data
cache, so there's

111
00:04:28,980 --> 00:04:31,410
no more useless database calls.

112
00:04:31,410 --> 00:04:34,290
To summarize all of this
new architecture shininess,

113
00:04:34,290 --> 00:04:37,140
we've talked about Room,
which is an object mapping

114
00:04:37,140 --> 00:04:40,350
library for SQLite,
LiveData, which notifies you

115
00:04:40,350 --> 00:04:43,080
when its data changes so
that you could update the UI,

116
00:04:43,080 --> 00:04:45,200
and importantly, it
works well with Room,

117
00:04:45,200 --> 00:04:47,070
so that you can easily
update the UI when

118
00:04:47,070 --> 00:04:48,820
the database values change.

119
00:04:48,820 --> 00:04:51,480
We've also talked about
Lifecycle Observers and Owners,

120
00:04:51,480 --> 00:04:55,020
which allow non-UI objects
to observe lifecycle events.

121
00:04:55,020 --> 00:04:57,150
And finally, we talked
about ViewModels,

122
00:04:57,150 --> 00:04:58,770
which provide you
data objects that

123
00:04:58,770 --> 00:05:00,890
survive configuration changes.

124
00:05:00,890 --> 00:05:03,710
Altogether, they make up a
set of architecture components

125
00:05:03,710 --> 00:05:07,190
for writing modular, testable,
and robust Android apps.

126
00:05:07,190 --> 00:05:08,660
You can sensibly
use them together,

127
00:05:08,660 --> 00:05:10,700
or you can pick and
choose what you need.

128
00:05:10,700 --> 00:05:12,530
But this is just the
tip of the iceberg.

129
00:05:12,530 --> 00:05:14,720
In fact, a more
fully-fledged Android app

130
00:05:14,720 --> 00:05:16,310
might look like this.

131
00:05:16,310 --> 00:05:19,150
For an in-depth look at how
everything works together

132
00:05:19,150 --> 00:05:20,900
and the reasoning
behind these components,

133
00:05:20,900 --> 00:05:23,174
check out the links in
the description below.

134
00:05:23,174 --> 00:05:24,590
To jump straight
into code and get

135
00:05:24,590 --> 00:05:26,090
started working
with these objects,

136
00:05:26,090 --> 00:05:27,840
you can check out the
codelabs and samples

137
00:05:27,840 --> 00:05:29,500
for lifecycle and persistence.

138
00:05:29,500 --> 00:05:32,180
Happy building and, as always,
don't forget to subscribe.

139
00:05:32,180 --> 00:05:34,330
[MUSIC PLAYING]

140
00:05:34,330 --> 00:00:00,000


1
00:00:00,000 --> 00:00:02,130
LYLA: В ответ на
популярный запрос,

2
00:00:02,130 --> 00:00:05,010
команда Android Framework
написала свой гид

3
00:00:05,010 --> 00:00:06,960
по архитектуре Android
приложений, и они

4
00:00:06,960 --> 00:00:09,870
разработали соответствующие
архитектурные компоненты.

5
00:00:09,870 --> 00:00:12,960
Hi, меня зовут Lyla, и я
разработчик Android,

6
00:00:12,960 --> 00:00:15,900
И я сейчас представлю для вас
эти замечательные архитектурные

7
00:00:15,900 --> 00:00:17,070
компоненты.

8
00:00:17,070 --> 00:00:19,890
Эти компоненты хранят данные,
управляют жизненным циклом,

9
00:00:19,890 --> 00:00:22,860
делают ваше приложение модульным,
помогают избежать утечек памяти,

10
00:00:22,860 --> 00:00:26,430
И не заставляют вас использовать
скучные шаблоны кода.

11
00:00:26,430 --> 00:00:28,680
Основной части Android
приложений нужна база данных

12
00:00:28,680 --> 00:00:30,780
подключенная надежно к UI.

13
00:00:30,780 --> 00:00:33,890
Новые компоненты: Room,
ViewModel, LiveData,

14
00:00:33,890 --> 00:00:35,732
и Lifecycle, делают это простым.

15
00:00:35,732 --> 00:00:38,190
Они могут использоваться совместно,
как строительные блоки,

16
00:00:38,190 --> 00:00:39,690
давайте посмотрим каким образом.

17
00:00:39,690 --> 00:00:42,990
Я собираюсь использовать базу данных
Room, как новую SQLite

18
00:00:42,990 --> 00:00:44,820
ORM библиотеку.

19
00:00:44,820 --> 00:00:46,440
Чтобы настроить таблицы
используя Room, мы

20
00:00:46,440 --> 00:00:49,550
можем определить Старый Добрый
Java Объект, или POJO.

21
00:00:49,550 --> 00:00:52,950
Мы тогда помечаем этот POJO
аннотацией @Entity

22
00:00:52,950 --> 00:00:56,650
и создаем ID маркер с
аннотацией @PrimaryKey.

23
00:00:56,650 --> 00:00:59,820
Теперь для каждого POJO, мы должны
определить DAO, или Database

24
00:00:59,820 --> 00:01:01,290
Access Object.

25
00:01:01,290 --> 00:01:03,130
Аннотированные методы
представляют собой SQLite

26
00:01:03,130 --> 00:01:05,950
команды, которые должны
взаимодействовать с данными POJO .

27
00:01:05,950 --> 00:01:08,790
Теперь взгляните на этот insert
метод и на query метод.

28
00:01:08,790 --> 00:01:11,400
Room автоматически конвертирует
ваш POJO объект

29
00:01:11,400 --> 00:01:14,265
в соответствующие таблицы
базы данных и обратно.

30
00:01:14,265 --> 00:01:17,130
Room также проверяет правильность
вашего SQLite во время компиляции.

31
00:01:17,130 --> 00:01:19,150
И если вы напишите что-то
немного не так,

32
00:01:19,150 --> 00:01:21,150
или ваша ссылка на столбец
будет не актуальна а БД,

33
00:01:21,150 --> 00:01:24,310
то выкинится полезная
предупреждающая ошибка.

34
00:01:24,310 --> 00:01:26,070
Теперь, когда у вас есть
Room база данных,

35
00:01:26,070 --> 00:01:27,570
вы можете использовать другие
новые архитектурные компоненты

36
00:01:27,570 --> 00:01:30,210
называемые LiveData,
для мониторинга изменений

37
00:01:30,210 --> 00:01:31,320
в базе данных.

38
00:01:31,320 --> 00:01:33,900
LiveData это наблюдаемый
[observable] держатель данных.

39
00:01:33,900 --> 00:01:35,910
Это значит, что он хранит
данные и оповещает вас

40
00:01:35,910 --> 00:01:39,090
если данные изменились,
и вы можете обновить UI.

41
00:01:39,090 --> 00:01:41,790
LiveData это абстрактный класс
который вы можете расширить,

42
00:01:41,790 --> 00:01:45,600
или, для простых случаев, вы можете
использовать MutableLiveData класс.

43
00:01:45,600 --> 00:01:47,730
Если вы обновляете данные
в MutableLiveData

44
00:01:47,730 --> 00:01:50,230
с установлением нового значения,
это может обновить и изменить

45
00:01:50,230 --> 00:01:51,570
ваш UI.

46
00:01:51,570 --> 00:01:53,170
Что еще более мощно,
так это то, что

47
00:01:53,170 --> 00:01:55,680
Room построена на
поддержке LiveData.

48
00:01:55,680 --> 00:01:58,080
Чтобы использовать их вместе,
вы просто изменяете DAO

49
00:01:58,080 --> 00:02:00,450
так чтобы возвращать объекты
завернутые в LiveData

50
00:02:00,450 --> 00:02:01,360
класс.

51
00:02:01,360 --> 00:02:04,850
Room создаст объект LiveData
наблюдающий базу данных.

52
00:02:04,850 --> 00:02:08,258
Тогда вы могли бы писать код
для обновления вашего UI.

53
00:02:08,258 --> 00:02:10,959
В конечном счете если вы
обновляете вашу Room БД,

54
00:02:10,960 --> 00:02:13,410
эти изменения изменят данные
вашего LiveData объекта,

55
00:02:13,410 --> 00:02:15,930
который автоматически
включит обновление UI.

56
00:02:15,930 --> 00:02:18,840
Это подводит меня к другой
удивительной особенности LiveData.

57
00:02:18,840 --> 00:02:21,344
LiveData осведомлен о
жизненном цикле.

58
00:02:21,344 --> 00:02:23,010
Теперь вы можете подумать,
что именно представляет собой

59
00:02:23,010 --> 00:02:24,990
осведомленный о жизненном
цикле компонент?

60
00:02:24,990 --> 00:02:26,390
Хорошо, я рада, что вы спросили.

61
00:02:26,390 --> 00:02:28,620
Через магическое наблюдение
за жизненным циклом,

62
00:02:28,620 --> 00:02:31,160
LiveData знает когда ваша
активити на экране,

63
00:02:31,160 --> 00:02:34,200
спит, или разрушена, итак
база данных не отправляет

64
00:02:34,200 --> 00:02:36,600
обнавления неактивному UI.

65
00:02:36,600 --> 00:02:38,520
Есть два интерфейса
для этого -

66
00:02:38,520 --> 00:02:41,070
Lifecycle Owner и
Lifecycle Observer.

67
00:02:41,070 --> 00:02:43,200
Lifecycle Owners это
объекты с жизненным циклом

68
00:02:43,200 --> 00:02:44,820
подобным таковым у
Activity и Fragment.

69
00:02:44,820 --> 00:02:46,620
Lifecycle Observers,
с другой стороны, наблюдают

70
00:02:46,620 --> 00:02:50,509
Lifecycle Owners и уведомляются
об изменниях жизненного цикла.

71
00:02:50,509 --> 00:02:52,050
Вот упрощенный взгляд на
простой пример кода

72
00:02:52,050 --> 00:02:55,770
для LiveData, который есть
также Lifecycle Observer.

73
00:02:55,770 --> 00:02:58,890
Эти методы аннотируются
с @OnLifecycleEvent

74
00:02:58,890 --> 00:03:00,970
для заботы об инициализации
и остановке, когда

75
00:03:00,970 --> 00:03:04,350
связанный Lifecycle Owner
стартует и останавливается.

76
00:03:04,350 --> 00:03:07,530
это позволяет объектам LiveData
заботится о своей настройке и

77
00:03:07,530 --> 00:03:09,690
остановке, поэтому
UI компоненты наблюдают

78
00:03:09,690 --> 00:03:12,000
LiveData, и
LiveData компоненты

79
00:03:12,000 --> 00:03:13,890
наблюдатели Lifecycle Owners.

80
00:03:13,890 --> 00:03:16,380
В качестве заметки для всех вас,
разработчики библиотек Android,

81
00:03:16,380 --> 00:03:19,350
вы можете использовать такое же
наблюдение за жизненным циклом

82
00:03:19,350 --> 00:03:22,350
для ваших функций настроек и
завершения работы, для ваших

83
00:03:22,350 --> 00:03:24,240
собственных библиотек.

84
00:03:24,240 --> 00:03:26,559
Теперь, у вас есть еще одна
проблема для решения.

85
00:03:26,559 --> 00:03:29,100
Поскольку ваше приложение используется
оно будет в разных состояниях

86
00:03:29,100 --> 00:03:32,070
в onDestroy и onResume,
onStart и onStop.

87
00:03:32,070 --> 00:03:34,800
Мы не хотим привязывать
LiveData к жизненному циклу

88
00:03:34,800 --> 00:03:36,660
Activity, потому что это
вызывает много

89
00:03:36,660 --> 00:03:39,830
случаев не необходимого
переиспользования кода.

90
00:03:39,830 --> 00:03:41,910
Примером этого является ваш
запрос к базе данных,

91
00:03:41,910 --> 00:03:44,820
каждый раз когда вы
поворачиваете телефон.

92
00:03:44,820 --> 00:03:46,300
Итак, что же вам делать?

93
00:03:46,300 --> 00:03:48,750
Хорошо, вы кладете ваш
LiveData и другие данные

94
00:03:48,750 --> 00:03:52,230
ассоциированные с UI
во ViewModel.

95
00:03:52,230 --> 00:03:55,650
ViewModels это объекты, которые
доставляют данные для UI компонентов

96
00:03:55,650 --> 00:03:57,750
и не зависят от изменений
конфигураций устройства.

97
00:03:57,750 --> 00:04:01,500
для создания объекта ViewModel,
вы наследуетесь от класса ViewModel.

98
00:04:01,500 --> 00:04:03,450
Вы кладете все
необходимые данные

99
00:04:03,450 --> 00:04:06,030
для UI вашего Activity
во ViewModel.

100
00:04:06,030 --> 00:04:08,850
И с тех пор как вы храните
ваши UI-данные во ViewModel,

101
00:04:08,850 --> 00:04:10,590
ваше приложение не будет
запрашивать базу данных

102
00:04:10,590 --> 00:04:13,860
A если ваша Activity пересоздана
или изменилась конфигурация.

103
00:04:13,860 --> 00:04:16,140
Затем, когда вы создаете ваши
Activity или Fragment,

104
00:04:16,140 --> 00:04:18,660
вы можете получить ссылку
на ViewModel и использовать его.

105
00:04:18,660 --> 00:04:19,680
Вот и все!

106
00:04:19,680 --> 00:04:21,269
Когда вы впервые
получаете ViewModel,

107
00:04:21,269 --> 00:04:23,160
он создается для
вашей Activity.

108
00:04:23,160 --> 00:04:24,840
Когда вы снова
запрашиваете ViewModel,

109
00:04:24,840 --> 00:04:27,000
ваша Activity получает
оригинальную ViewModel

110
00:04:27,000 --> 00:04:28,980
с данными для UI из кеша,
так что никаких бесполезных

111
00:04:28,980 --> 00:04:31,410
запросов к базе данных.

112
00:04:31,410 --> 00:04:34,290
Подводя всему итог:
новая архитектура блестяща,

113
00:04:34,290 --> 00:04:37,140
мы поговорили о Room,
которая является object mapping

114
00:04:37,140 --> 00:04:40,350
library для SQLite,
LiveData, который предупреждает вас

115
00:04:40,350 --> 00:04:43,080
если данные изменились, и вы
можете обновить ваш IU,

116
00:04:43,080 --> 00:04:45,200
и, что важно, он
хорошо работает с Room,

117
00:04:45,200 --> 00:04:47,070
так что вы легко сможете
обноовить ваш UI, когда

118
00:04:47,070 --> 00:04:48,820
данные из базы изменились.

119
00:04:48,820 --> 00:04:51,480
Мы также поговорили о
Lifecycle Observers и Owners,

120
00:04:51,480 --> 00:04:55,020
которые позволяют не-UI объектам
наблюдать за событиями жизненного цикла.

121
00:04:55,020 --> 00:04:57,150
И наконец, мы поговорили
о ViewModels, которые

122
00:04:57,150 --> 00:04:58,770
предоставляют вам
объекты с данными, которые

123
00:04:58,770 --> 00:05:00,890
сохраняются при изменениях конфигураций.

124
00:05:00,890 --> 00:05:03,710
В целом они составляют набор
архитектурных компонентов

125
00:05:03,710 --> 00:05:07,190
для написания модульных, тестируемых,
и надежных Android-приложений.

126
00:05:07,190 --> 00:05:08,660
Вы можете, где необходимо,
использовать их вместе,

127
00:05:08,660 --> 00:05:10,700
или использовать только то,
что вам нужно.

128
00:05:10,700 --> 00:05:12,530
Но это только
верхушка айзберга.

129
00:05:12,530 --> 00:05:14,720
Фактически, более функциональное
Android-приложение

130
00:05:14,720 --> 00:05:16,310
может выглядеть так.

131
00:05:16,310 --> 00:05:19,150
Для детального изучения, как
все работает вместе,

132
00:05:19,150 --> 00:05:20,900
и для понимания этих
компонентов, ознакомтесь

133
00:05:20,900 --> 00:05:23,174
со ссылками под
этим видео.

134
00:05:23,174 --> 00:05:24,590
Чтобы перейти прямо к
коду и начать работу

135
00:05:24,590 --> 00:05:26,090
с этими компонентами,
вы можете перейти,

136
00:05:26,090 --> 00:05:27,840
к codelabs и примерам
для жизненного цикла

137
00:05:27,840 --> 00:05:29,500
и поддержки сохранности данных.

138
00:05:29,500 --> 00:05:32,180
Хорошего проектирования, и как всегда,
не забывайте подписываться.

139
00:05:32,180 --> 00:05:34,330
[ИГРАЕТ МУЗЫКА]

140
00:05:34,330 --> 00:00:00,000


01 09 2017

Теги заметки: