2019 DevDay How To Reduce Android App Launch Time by Scoping Your Dependencies Using Koin DI > Aldo Kelvianto Wachyudi > LINE Indonesia Android Engineer
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?
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
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."
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
Injection Result - Scoped // 73% faster! // Only binds 2 objects (Application and Context) total 15 registered definitions load modules in 0.448 milliseconds
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