Slide 1

Slide 1 text

2019 DevDay How To Reduce Android App Launch Time by Scoping Your Dependencies Using Koin DI > Aldo Kelvianto Wachyudi > LINE Indonesia Android Engineer

Slide 2

Slide 2 text

Introduction > I've been working on LINE Today App project since 2018 > LINE Today App version is now v4.1 > LINE Today features: Read news, watch videos, listen to podcast, give comments > How do we maintain more features in the future?

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

More Features More Objects More Modules

Slide 5

Slide 5 text

Dev Day Schedule App List of Speakers Show News

Slide 6

Slide 6 text

> SpeakerActivity > SpeakerModule // 7 objects List of Speaker News > NewsActivity > NewsModule // 6 objects Features, Activity, Module

Slide 7

Slide 7 text

How To Inject These Modules?

Slide 8

Slide 8 text

What's the Problem? > Production app has more than 2 modules and 15 objects > If we have 200 objects, it takes ~> 16.7 ms (skipped frame!) > Those objects linger in memories, used or not > Not ready to scale > Hard to maintain the code. Minor changes cause unexpected side-effect

Slide 9

Slide 9 text

How To Improve This? > SpeakerActivity don't need NewsActivity objects, vice versa > Scope the objects "Scope is a fixed duration of time or method calls in which an object exists."

Slide 10

Slide 10 text

Injection Result - Unscoped // 2 objects from context // 7 objects from speaker module // 6 objects from news module total 15 registered definitions load modules in 1.717 milliseconds

Slide 11

Slide 11 text

Injection Result - Scoped // 73% faster! // Only binds 2 objects (Application and Context) total 15 registered definitions load modules in 0.448 milliseconds

Slide 12

Slide 12 text

Scoping Benefit > Faster app launch time > The objects exist only when they're used > Ready to scale > More maintainable code

Slide 13

Slide 13 text

How To Scope Module? Unscoped

Slide 14

Slide 14 text

How To Scope Module? Scoped

Slide 15

Slide 15 text

Summary > In Koin, Scope can ties to Activity, Fragment, ViewModel, or custom (define yourself) > It’s a concept, can be applied to any DI framework > In Dagger, you can use Scope annotation or Subcomponents > Code is available on https://github.com/aldoKelvianto/KoinScopeDemo