How to reduce Android app launch time by scoping your dependencies using Koin DI

How to reduce Android app launch time by scoping your dependencies using Koin DI

Aldo Kelvianto Wachyudi
LINE Indonesia Android Engineer
https://linedevday.linecorp.com/jp/2019/sessions/S2-3

Be4518b119b8eb017625e0ead20f8fe7?s=128

LINE DevDay 2019

November 21, 2019
Tweet

Transcript

  1. 2019 DevDay How To Reduce Android App Launch Time by

    Scoping Your Dependencies Using Koin DI > Aldo Kelvianto Wachyudi > LINE Indonesia Android Engineer
  2. 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?
  3. None
  4. More Features More Objects More Modules

  5. Dev Day Schedule App List of Speakers Show News

  6. > SpeakerActivity > SpeakerModule // 7 objects List of Speaker

    News > NewsActivity > NewsModule // 6 objects Features, Activity, Module
  7. How To Inject These Modules?

  8. 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
  9. 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."
  10. 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
  11. Injection Result - Scoped // 73% faster! // Only binds

    2 objects (Application and Context) total 15 registered definitions load modules in 0.448 milliseconds
  12. Scoping Benefit > Faster app launch time > The objects

    exist only when they're used > Ready to scale > More maintainable code
  13. How To Scope Module? Unscoped

  14. How To Scope Module? Scoped

  15. 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