
Fragmented - Android Developer Podcast
The Fragmented Podcast is the leading Android developer podcast started by Kaushik Gopal & Donn Felker. Our goal is to help you become a better Android Developer through conversation & to capture the zeitgeist of Android development. We chat about topics such as Testing, Dependency Injection, Patterns and Practices, useful libraries, and much more. We will also be interviewing some of the top developers out there. Subscribe now and join us on the journey of becoming a better Android Developer.
Latest episodes

Apr 29, 2019 โข 1h 3min
158: Building High Performance Audio on Android
In this show, Donn and Kaushik talk to Don Turner about how to build high-performance audio apps on Android.
We dive deep into history of audio on Android, some of the problems that the platform faced. Then look into the tools that we now have to solve those problems so that developers like you can build killer audio apps.
Enjoy.
Shownotes
Android Midi
Oboe
Intro to Oboe (Video)
Google IO 2019 Talk
Sponsors ๐
sentry.io
Contact
Don Turner - @donturner
Donn Felker - @donnfelker (Twitter) and donnfelker (Instagram)
Kaushik Gopal - @kaushikgopal (Twitter) and kaushikgopal (Instagram)
Fragmented on Twitter: @fragmentedcast
Our YouTube channel
Join thousands of other developers on our free chat server. Ask questions, answer questions, be part of the community at our The Fragmented Discord chat

Apr 1, 2019 โข 26min
157: Effective Java Item# 20 - Prefer interfaces to abstract classes
In this episode, Donn talks about Item #20 in the Effective Java book (third series) by Joshua Bloch. He discusses why you should think about using interfaces over abstract classes, how they can add mixin like behavior to retrofit existing classes with new behavior, default methods, skeleton implementations and more.
Enjoy.
Sponsors ๐
sentry.io - Your code is broken. Letโs fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Mar 18, 2019 โข 12min
156: Increase App Engagement with Android Q
With the release of Android Q we now have the settings panel and all its glory. This panel, while most likely overlooked as a minor feature, is actually a diamond in the rough.
Why?
Simply because it's going to lower the abandonment rate of your app and increase the engagement of your app at the same time. Donn talks about this in depth in this episode.
Enjoy.
Shownotes
Android Q Features
Sponsors ๐
sentry.io - Your code is broken. Letโs fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Mar 11, 2019 โข 21min
155: Naming conventions for RxJava Observables
The Android community has come to use Rx pretty heavily but surprisingly there hasn't been any one convention that's won, when it comes to how we name our functions that return Observables. getUser(), user(), userUpdates() ? In this mini-episode dutifully does the yak-shaving for you and discusses what some options are and what the community has been gravitating towards.
Enjoy.
Shownotes
yak-shaving
Upday's convention:
Florina's tweet
Upday's blog post - Reactive Frustrations 1
Options
// option 1
fun getUser(): Single
// yuck
// option 2
fun user(): Observable
// but what does this mean?
// option 3
fun user(): Single
fun userUpdates(): Observable
// or
fun userStream(): Observable
// this is looking good
// option 4 (upday style)
fun userOnce(): Single
fun userStream(): Observable
fun userOnceAndStream(): Observable
Stay tuned for a future episode, where we discuss more details and more complicated cases to handle (like emitting a list of user, policies for fetching the first user as quickly as possible etc.).
Also #FinishNotation.
Sponsors ๐
sentry.io - Your code is broken. Letโs fix it together - https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Mar 5, 2019 โข 19min
154: Developer Growth: Start Writing
Growing as a developer is important for you, your career and your future. One of the best ways to grow your career is to start writing.
Donn recommends starting a blog or contributing to a blog. The process of writing will expose your weak points in your comprehension of a topic. Refining your communication skills through writing and putting thoughts out into the universe via a blog will broaden your skills as a developer.
Ultimately, writing is about communication and communication is the cornerstone of success in much of anything. In this episode, Donn walks you through why you should start writing to help you grow as a developer.
Enjoy.
Sponsors ๐
sentry.io - Your code is broken. Letโs fix it together - https://sentry.io/for/android/
Instabug -They're giving a special offer for all listeners, go to instabug.com/fragmented, signup, install the SDK, and you will get a free Instabug t-shirt and a 14-day free trial.
Contact
Discord chat or @fragmentedcast or [our Youtube channel][10]
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Feb 19, 2019 โข 1h 14min
153: How to be an indie Android developer with Chris Lacy
Listen to all star Indie developer and friend of the show Chris Lacy. Chris Lacy created the beloved Action Launcher - arguably one of the best Launcher apps on Android. In this epiisode, he talks to us about what it's like being an indie developer, starting on Action Launcher and of course his newest creation - ActionDash.
Enjoy.
Shownotes
TweetLanes
Action Launcher
On selling Link Bubble
Brave browser
ActionDash
Introducing ActionDash
Download on the play store
Slick graph library MPAndroidChart
Action Launcher is hiring!
Sponsors ๐
sentry.io
Nevercode
Nevercode - CI/CD for Android, iOS, React Native & Ionic
Try Codemagic
Join Flutter CI/CD Slack Community
Contact
@chrismlacy or work with him or leave a 5 star reviews on ActionDash :)
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Feb 11, 2019 โข 59min
152: Should I Rewrite My App? with Jeroen Mols
After you've been working on an app for sometime, the most common quandry one runs into is the need to rewrite the app. We've all been there, there's technical debt, we've improved our understanding, the tools have become better, we've become better. So should you go back and just rewrite the whole app? Jeroen walks us through his thinking.
Shownotes
The big Rewrite - Jeroen's talk
Droidcon Italy
Slides for the talk with notes
Philips Hue
Philips Hue API
Resources
The big rewrite - Chad Fowler
The big rewrite - Jo Van Eyck
Paying technical depth - Jeroen Moons
Things you should never do - Joel Spolsky
Write awesome unit tests - Jeroen Mols
Pro Android Studio - refactoring - Jeroen Mols
Why We Decided to Rewrite Uberโs Driver App - Nandhini Ramaswamy and Adam Gluck
How to Ship an App Rewrite Without Risking Your Entire Business - James Barr, and Zeyu Li
Sponsors ๐
sentry.io
Contact
@molsjeroen or his blog or his speakerdeck
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Feb 4, 2019 โข 57min
151: Evolving Android architectures (Part 2)
In this episode, we continue our discussion from episode 148 on evolving android architectures. We collected some of the questions from the community and try to answer them.
Shownotes
Listen to the recap in episode 148
LCE: Modeling Data Loading in RxJava
Rx example pull from db then network (from KG's presentation)
Donn's caster.io episode on the amb operator
Akshay's episode on Arch components (specifically Live Data)
Jose's cheatseet on Activity lifecycle
KG's example of using this architecture
Sponsors ๐
sentry.io
Nevercode
Try Codemagic - CI/CD for Flutter apps by Nevercode
Join Flutter CI/CD Slack Community
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Jan 21, 2019 โข 19min
150: Learning Kotlin - Returns, Jumps & Labels
Shownotes
Kotlin Returns and Jumps Documentation
Code
data class Customer(val isPlatinum: Boolean)
fun main() {
val customer = Customer(false)
println("Number of points customer has: ${calculatePoints(customer)}")
// Break out of the loop once we're over 25
for (i in 1..100) {
if (i > 25) {
break
} else {
println(i)
}
}
// Skip all even numbers
for (i in 1..100) {
if (i % 2 == 0) {
continue
} else {
println(i)
}
}
// Break out of the outer loop (which breaks out of the inner too) using a label
donn@ for (i in 1..100) {
for (j in 100..200) {
if (j > 150) break@donn // This will break out of the inner loop and outer loop
else println("i: $i, j: $j")
}
}
// Continue processing the next outer loop value when a condition is met.
donn@ for (i in 1..100) {
for (j in 100..200) {
if (j > 150) continue@donn // This will break out of the inner loop and outer loop
else println("i: $i, j: $j")
}
}
// returns with label
example1()
example2()
println("I'm done processing!")
}
fun calculatePoints(customer: Customer): Int {
if (customer.isPlatinum) {
return 100000
} else {
return 10
}
}
fun example1() {
listOf(1, 2, 3, 4, 5, 6, 7, 8, 9).forEach {
if (it > 7) {
return
} else {
println(it)
}
}
println("This wont print :( because return exited the bar() function")
}
fun example2() {
listOf(1, 2, 3, 4, 5, 6, 7, 8, 9).forEach bin@ {
if (it > 7) {
return@bin
} else {
println(it)
}
}
println("This will print! :) return exited the forEach!")
}
Sponsors ๐
Nevercode
Nevercode is taking Flutter revolution extremely serious and is prepared to offer kick-ass CI/CD for Flutter projects with codemagic.io. Check it out and get started at https://codemagic.io/
Sentry.io
Sentry tells you about errors in your code before your customers have a chance to encounter them.
Check them out at: https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)

Jan 15, 2019 โข 25min
149: Learning Kotlin: inline classes and Type driven design
In this quick fragment, Kaushik talks about the new Kotlin 1.3 experimental feature "inline classes" and how it helps with Type driven design.
Shownotes
Kotlin releases 1.3
Fragmented episode #116 - inline, noinline & crossinline
Think strong types and simple values
typealias.com blog
Type driven design resources
Type drive approach to Functional design - Michael Feathers
Type driven design in Elm
blog.ploeh - Type driven design
Kotlin KEEP
KEEP proposal - inline classes
KEEP discussion
vs typealias
Fragmented Ep #122 - typealiases
inline classes vs typealiases
How to represent money in programming
Kotlin experimental
Jake Wharton - inline classes make great database ids
Sponsors ๐
Nevercode
Nevercode is taking Flutter revolution extremely serious and is prepared to offer kick-ass CI/CD for Flutter projects with codemagic.io. Check it out and get started at https://codemagic.io/
Sentry.io
Sentry tells you about errors in your code before your customers have a chance to encounter them.
Check them out at: https://sentry.io/for/android/
Contact
Discord chat or @fragmentedcast or our Youtube channel
@donnfelker and donnfelker (on Instagram)
@kaushikgopal and kaushikgopal (on Instagram)