Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DroidKaigi 2018 App Architecture
Search
takahirom
February 27, 2018
Programming
2.6k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DroidKaigi 2018 App Architecture
takahirom
February 27, 2018
More Decks by takahirom
See All by takahirom
AIエージェントで 変わるAndroid開発環境
takahirom
3
880
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
160
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1.1k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.2k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.4k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.5k
Android Tools & Performance
takahirom
1
1.3k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
Other Decks in Programming
See All in Programming
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
210
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
Foundry Localでエージェント開発
seosoft
0
140
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
Oxlintはいいぞ(続)
yug1224
1
550
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
6
2.4k
이 함수, 실패하면 어떻게 되나요? null부터 Rich Errors까지, Kotlin 에러 처리 15년
haeti2
0
140
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
160
新卒PdEのリアル
ryu1013
1
410
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
2
3.9k
Writing Fast Ruby
sferik
630
63k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
970
GitHub's CSS Performance
jonrohan
1033
470k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
Building AI with AI
inesmontani
PRO
1
1.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Statistics for Hackers
jakevdp
799
230k
Un-Boring Meetings
codingconduct
0
410
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
520
Transcript
%SPJE,BJHJ"QQ "SDIJUFDUVSF UBLBIJSPN
˖ UBLBIJSPN !OFX@SVOOBCMF ˖ 劤せכ嬁「䃨峔 ׄױַמ ˖ "OESPJEָ㥨ֹדׅկ
˖ "CFNB57ך"OESPJE،فٔ⡲גְתׅկ ˖ %SPJE,BJHJⰕ䒭،فٔךٔ٦ت٦׃ת׃կ ⟃♳ךفؙٕٔؒأزָ֮הֲ׀ְׂת׃! 荈ⴓחאְג
鏣鎘ך鑧
%SPJE,BJHJ،فٔך鏣鎘
%SPJE,BJHJⰕ䒭،فٔהכ ˖ %SPJE,BJHJכؒٝآص،ָ⚺䕵ך"OESPJEؕٝؿ؋ٖٝأ דׅկךؕٝؿ؋ٖٝأךⰕ䒭،فٔדׅկ ˖ %SPJE,BJHJכ"OESPJE䪮遭䞔㜠ךⰟ剣ה؝ىُص؛٦ءّ ٝ湡涸חծ䎃剢傈 加 ծ傈 ꆃ
ך傈⪵ׁ ת׃կ
None
˖ إحءّٝ ˖ إحءֶّٝ孡חⰅ⳿勻 ˖ إحءّٝ䱱ׇ ˖ ؿ؍٦سغحؙ鷏 ˖ ֶ濼ׇ
˖ 㖑㔳 ˖ أهٝ؟٦邌爙 ˖ זוזו %SPJE,BJHJ،فٔך堣腉
˖ זץֻֻׁך➂ָ鋅גꟼג嚂׃״ֲחׅ ˖ זָ罋חדֹךחׅ %SPJE,BJHJ،فٔך؞٦ٕ
˖ ,PUMJO ˖ "SDIJUFDUVSF$PNQPOFOUT⢪ֲ ˖ %SPJE,BJHJך،فٔזךדծ剑倜䪮遭װٓ؎ـٓٔכ ⢪ְְ קר寸תגְֿה
罋ח׃،٦ؗذؙثٍ
.77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ ˖ ㉏겗挿
.77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ ˖ ㉏겗挿
˖ Ⰻֻずׄד㉏겗כזְָծ"SDIJUFDUVSF $PNQPOFOUTװ,PUMJOָוֲ䕦갟ַׅ罋ִ ְկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ ˖ ㉏겗挿
˖ Ⰻֻずׄד㉏겗כזְָծ"SDIJUFDUVSF $PNQPOFOUTװ,PUMJOָוֲ䕦갟ַׅ罋ִ ְկ .77. ̔%BUB#JOEJOHכ⢪גְְֹ IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
$MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ $MFBO"SDIJUFDUVSF
IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ ˖
孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ ˖
孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ ˖ 罋ִ倯《Ⰵךכְְ孡ָׅ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ ˖
孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ ˖ 罋ִ倯《Ⰵךכְְ孡ָׅ $MFBO"SDIJUFDUVSF "1*זוךٖأهٝأךתת⢪׆ وحؾؚٝ׃ג،فٔⰻדכ ְֹז&OUJUZ⢪ְְ ̔ IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
'MVY IUUQTHJUIVCDPNGBDFCPPLVY״
˖ וֿחזח剅ַֻծⳢ椚ך鷄ְװׁׅזוהגⴓַװְׅկ ⦐➂涸ח 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״
˖ וֿחזח剅ַֻծⳢ椚ך鷄ְװׁׅזוהגⴓַװְׅկ ⦐➂涸ח ˖ Ⰻ涸ח《Ⰵה ˑזץֻֻׁך➂ָ鋅גꟼג嚂׃״ֲח˒הְֲ䠐 ַ鎉ֲה䒦爡⟃㢩ד֮ת鋅ַֽזְךד植朐כ⿑׃ְ 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״
˖ וֿחזח剅ַֻծⳢ椚ך鷄ְװׁׅזוהגⴓַװְׅկ ⦐➂涸ח ˖ Ⰻ涸ח《Ⰵה ˑזץֻֻׁך➂ָ鋅גꟼג嚂׃״ֲח˒הְֲ䠐 ַ鎉ֲה䒦爡⟃㢩ד֮ת鋅ַֽזְךד植朐כ⿑׃ְ 'MVY 倯ぢךر٦ةך崧כ《Ⰵגְְֹ ̔
IUUQTHJUIVCDPNGBDFCPPLVY״
3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ 3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז 铡僇ָ֮կ 3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז 铡僇ָ֮կ ˖ 㹋鄲鑐ָ䮲䫓կկ 3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז 铡僇ָ֮կ ˖ 㹋鄲鑐ָ䮲䫓կկ 3FEVY @CheckResult fun
<T> Observable<T>.toResult(schedulerProvider: SchedulerProvider): Observable<Result<T>> { return compose { item -> item .map { Result.success(it) } .onErrorReturn { e -> Result.failure(e.message ?: "unknown", e) } .observeOn(schedulerProvider.ui()) .startWith(Result.inProgress()) } } ̔3FTVMUך⡲倯כ罋חזֲ
"SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ ˖ ㉏겗挿 "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ ˖ ㉏겗挿 ˖ -JWF%BUBדכ-JWF%BUBず㡦穈さׇ
3Y+BWBדְֲ[JQך״ֲז⹛⡲ָ㣐㢌 "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ ˖ ㉏겗挿 ˖ -JWF%BUBדכ-JWF%BUBず㡦穈さׇ
3Y+BWBדְֲ[JQך״ֲז⹛⡲ָ㣐㢌 "SDIJUFDUVSF$PNQPOFOU ̔7JFX.PEFM -JWF%BUB 3PPNכⵃ欽ָׅ3Y+BWB⢘欽 IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
罋ִ،٦ؗذؙثٍ
罋ִ،٦ؗذؙثٍ
罋ִ،٦ؗذؙثٍ ˖ 㛇劤涸ח"SDIJUFDUVSF$PNQPOFOUTך 鏣鎘ك٦أח ˖ 䗳銲ה䙼ֲך酡㸣׃גְֻ䕎
(SPVQJFך %BUB#JOEJOH؟ه٦زⵃ欽
.BQQFS⢪גծ "1*זו✲䞔ָ،فٔⰻח Ⰵ鴥תזְ״ֲח
倯ぢדر٦ة Ⳣ椚 "DUJWJUZ ̕ 7JFX.PEFMך.FUIPE ̕ 3FQPTJUPSZ ̕ 7JFX.PEFMך-JWF%BUB
̕ "DUJWJUZ
0CTFSWBCMFUP3FTVMUד㢌䳔׃ג 3FTVMUחׅ
ꬊず劍Ⳣ椚כ3Y+BWBך 0CTFSWBCMF'MPXBCMF
،٦ؗذؙثٍٖؽُ٦ך 僥
"1*ך/VMMBCMFⳢ椚ׅהֿ כׇֹׁ /VMMBCMF.BQQFSדכׇֹׁ״ֲח׃ת׃կ
-JWF%BUBך.VUBCJMJUZך盖椚 "DUJWJUZ'SBHNFOUַ-JWF%BUBךWBMVFְׄזְ״ֲחׅ class SearchViewModel @Inject ...{ private val mutableResult =
MutableLiveData<Result<SearchResult>>() val result: LiveData<Result<SearchResult>> = mutableResult ... mutableResult.value = it
،٦ؗذؙثٍٖؽُ٦ך僥 ˖ 7JFX.PEFMךًاحسせך鋉 ˖ GBWPSJUF4FTTJPO 4FTTJPO PO'BWPSJUF$MJDL 4FTTJPO 7JFX.PEFMכ7JFXך؎كٝز「ֽ《גծוֲַׅⴻ倖ׅ䕎ח
㢌刿
ֿך،٦ؗذؙثٍך 葺ַ䨽
.BQQFSָ葺ַ
.BQQFSָ葺ַ "1*ךٖأهٝأ ˖ "1*ךإحءّٝךر٦ةכ أؾ٦ؕ٦*%ֽ䭯גְ״ֲז朐䡾 ֿ،فٔח崧ׅה ְזהֿד4QFBLFS嗚稊ׅ䗳銲ָ⳿גֹ TFTTJPOTQFBLFSTד أؾ٦ؕ٦♧鋮ח ،ؙإأדֹ״ֲח׃
.BQQFSָ葺ַ ˖ ،فٔך⚥דכ/VMMBCMF 䠐陎׃זֻג葺ֻז ˖ ♧鿇劤䔲חזְ〳腉䚍ָ ֮ךכOVMMⰅ
.BQQFSָ葺ַ ˖ 㛇劤涸ח鋅湡 1SFTFOUBUJPO鿇ⴓ חꟼׅ13װ何⥜ָ㢳ַךדծ 7JFXワָ笺뜧חדֹגծ嚂ח涪דֹגְשַ ˖ .PEFMחⳢ椚㺔ׇֿהדծ⡂״ֲזⳢ椚ֻׁך㜥䨽ד剅ַזֻג״ַ class Session(
open val id: String, open val dayNumber: Int, open val startTime: Date, open val endTime: Date ) { ... val isOnGoing: Boolean get() = System.currentTimeMillis() in startTime.time..endTime.time
ر٦ة 倯ぢד崧ׇ״ֲח׃
ر٦ة 倯ぢד崧ׇ״ֲח׃
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז ˖ 7JFXך朐䡾盖椚-JWF%BUBח⟣ׇ
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז ˖ 7JFXך朐䡾盖椚-JWF%BUBח⟣ׇ
˖ 䕵ⶴָⴓַװְׅזו
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז ˖ 7JFXך朐䡾盖椚-JWF%BUBח⟣ׇ
˖ 䕵ⶴָⴓַװְׅזו ˖ %#ח"1*ַر٦ةⰅגծ %#ךر٦ةַ邌爙ֿׅהדծ ر٦ةך崧ָⴓַװַׅ
ֿך،٦ؗذؙثٍך 䝤ַ䨽ծ㉏겗חז䨽
倯ぢׄׯזֻג؝٦سָ剅ֽג׃ תֲ
倯ぢׄׯזֻג؝٦سָ剅ֽג׃ תֲ 倯ぢהְגְָծ7JFX.PEFMך ًاحسⰻד -JWF%BUBⰻךEBUBָ鋅ג׃תֲկ ֿ׃澓ח⽃倯ぢדזֻז ؝٦سָ铣חֻֻזגְֲֹ
倯ぢׄׯזֻג؝٦سָ剅ֽג׃ תֲ 㹋ꥷחٖؽُ٦ד鎉ֲֿהחזג؝٦ر؍ؚٝד䠐陎ׅ䗳銲ָ֮ (࣮ͨͩࡍʹʹͳΔ΄Ͳͷେ͖͞Ͱͳ͔ͬͨͷͰ ࣮ࡍʹʹͳΒͳ͍मਖ਼Ͱͨ͠)
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ 3&"%.&״
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ ˖ 7JFX.PEFM-JGFDZDMF0CTFSWFSחׅך כؕح؝؎؎ֽו䗳銲זְַ 3&"%.&״
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ ˖ 7JFX.PEFM-JGFDZDMF0CTFSWFSחׅך כؕح؝؎؎ֽו䗳銲זְַ ˖ ̔醱侧ך'SBHNFOUדⰟ剣׃ծ "DUJWJUZה'SBHNFOUדⰟ剣׃׃儗 ח Ⰻ鿇涫ꐮׅךַծוךٓ؎ؿ؟؎ؙٕ
ךًاحسַⴓַזְկ 3&"%.&״
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ ˖ 7JFX.PEFM-JGFDZDMF0CTFSWFSחׅך כؕح؝؎؎ֽו䗳銲זְַ ˖ ̔醱侧ך'SBHNFOUדⰟ剣׃ծ "DUJWJUZה'SBHNFOUדⰟ剣׃׃儗 ח Ⰻ鿇涫ꐮׅךַծוךٓ؎ؿ؟؎ؙٕ
ךًاحسַⴓַזְկ ˖ ࣮ࡍͦΜͳʹ͍ͬͯͳͯ͘ɺזח 㹱ָֽ֮דכזַָ搀䠐䠬 3&"%.&״
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐ ˖ ⾱㔓כةـךⴖ剏ִזו7JFX.PEFM穗歋דכזֻծ 7JFXך؎كٝزַ湫䱸乼⡲׃גְַַ
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐ ˖ ⾱㔓כةـךⴖ剏ִזו7JFX.PEFM穗歋דכזֻծ 7JFXך؎كٝزַ湫䱸乼⡲׃גְַַ ˖ ̔湫׃倯ך؎ً٦آה׃גכ鋵ך'SBHNFOUװ"DUJWJUZך7JFX.PEFM鋅גأؙٗ٦ ٕזוד湫ֲׇ
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐ ˖ ⾱㔓כةـךⴖ剏ִזו7JFX.PEFM穗歋דכזֻծ 7JFXך؎كٝزַ湫䱸乼⡲׃גְַַ ˖ ̔湫׃倯ך؎ً٦آה׃גכ鋵ך'SBHNFOUװ"DUJWJUZך7JFX.PEFM鋅גأؙٗ٦ ٕזוד湫ֲׇ
˖ ̔תכ'MVYד朐䡾盖椚׃זהַדַֹ
7JFX.PEFMⰻדծוֿתד3Y+BWBד וֿתד-JWF%BUBד剅ַֻ㉏겗 ˖ ずؙׄٓأⰻח֮גծ㞮歲ָ切僳דծודוךְּ剅ַֻךهٔ ء٦ָזַկ ˖ 㛇劤涸חכ3Y+BWBךקֲָさ䧭הַ䖤䠐זכ׆זךדծח㺔ׇגְ ְָֹծ-JWF%BUBָ埆חְה⢪ְֻזגֻ val sessions:
LiveData<Result<List<Session>>> by lazy { repository.sessions .toResult(schedulerProvider) .toLiveData() } val isLoading: LiveData<Boolean> by lazy { sessions.map { it.inProgress } } ... ֿ̔刿倜ה朐䡾䭯אהָֿⴽղזծזהַזַ
%SPJE,BJHJك٦أח ،فٔ⡲ה׃
%SPJE,BJHJ،فٔזח醱꧟
%SPJE,BJHJ،فٔזח醱꧟ ˖ 知⽃חׅחإحءّٝ邌爙⟃㢩ך堣腉搀ֻ׃ 遤ꤐ׃TJNQMJGZـٓٝث欽䠐׃ךדծ ك٦أחְׄגה葺ְַ
TJNQMJGZـٓٝث⯋ח 鯪ֻ'MVY晛⡲ג
(SPVQJF4FDUJPO "DUJWJUZ'SBHNFOU ""$7JFX.PEFM 3FQPTJUPSZ 0CTFSWBCMF'MPXBCMF4FTTJPO -JWF%BUB3FTVMU NFUIPEDBMM-JGFDZDMF0CTFSWFS -JTU4FTTJPO*UFN .FUIPET -JWF%BUB
-JWF%BUB -JWF%BUB QPTU
"DUJPO$SFBUPS (SPVQJF4FDUJPO "DUJWJUZ'SBHNFOU 4UPSF ""$7JFX.PEFM 3FQPTJUPSZ 0CTFSWBCMF'MPXBCMF4FTTJPO -JWF%BUB3FTVMU -JTU4FTTJPO*UFN -JWF%BUB
-JWF%BUB -JWF%BUB %JTQBDIFS SYSFMBZ
TJNQMJGZـٓٝثַ 'MVY晛鯪ֻ⡲ג /&8 ˖ "CFNB57"OESPJEך'MVY،٦ؗذؙثٍ ׳ה罋ח׃גծ ""$《Ⰵך ˖ TJNQMJGZVYـٓٝثח֮תׅկ ˖
IUUQTHJUIVCDPN%SPJE,BJHJ DPOGFSFODFBQQDPNQBSF TJNQMJGZTJNQMJGZVY
TJNQMJGZـٓٝثַ 'MVY晛鯪ֻ⡲ג /&8
TJNQMJGZـٓٝثַ 'MVY晛鯪ֻ⡲ג /&8 ˖ "DUJPO$SFBUPS4UPSFכ 3Y3FMBZ⢪&WFOU#VT ˖ 4UPSFדכ-JWF%BUB䭯א ˖ 4UPSFכ7JFX.PEFMךהֹ֮לծ
4JOHMFUPOךהֹ֮
תה
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ ˖ ׃罋ח،فٔ⡲גֻׁזծTJNQMJGZـٓٝثַ⡲גהְְַ ׃תׇկ ְֲֲֿ儗וֲׅלְְג䙼NBTUFSـٓٝثחְְ֮כ׆կ
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ ˖ ׃罋ח،فٔ⡲גֻׁזծTJNQMJGZـٓٝثַ⡲גהְְַ ׃תׇկ ְֲֲֿ儗וֲׅלְְג䙼NBTUFSـٓٝثחְְ֮כ׆կ ˖ 'MVYח莆ָ֮לծTJNQMJGZVYـٓٝثַ⡲גךְְַ׃תׇ կ
ְֲֲֿ儗וֲׅלְְג䙼"CFNB57ך؝٦س鋅לⴓַך דծ"CFNB57פ ⴓַ眔㔲ד֮ל兛鸐חֶ瘶ִ׃תׅկ
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ ˖ ׃罋ח،فٔ⡲גֻׁזծTJNQMJGZـٓٝثַ⡲גהְְַ ׃תׇկ ְֲֲֿ儗וֲׅלְְג䙼NBTUFSـٓٝثחְְ֮כ׆կ ˖ 'MVYח莆ָ֮לծTJNQMJGZVYـٓٝثַ⡲גךְְַ׃תׇ կ
ְֲֲֿ儗וֲׅלְְג䙼"CFNB57ך؝٦س鋅לⴓַך דծ"CFNB57פ ⴓַ眔㔲ד֮ל兛鸐חֶ瘶ִ׃תׅկ ˖ ֿך罋ִ倯ד⡲הה葺ֻזזוⰟ剣ְֽה㴍׃ְדׅɻ
ָ֮הֲ׀ְׂת׃