

Fragmented - Android Developer Podcast
Donn Felker, Kaushik Gopal
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.
Episodes
Mentioned books

Mar 19, 2018 • 32min
118: Flutter and cross platform development with GDE Eugenio Marletti - Part 1
In this episode, we dive into one of our most requested topics and highly anticipated ones - Flutter.
To help us understand Flutter in-depth, we talk to Flutter's GDE Eugenio Marletti. In Part 1 of this 2 part series, Eugenio helps us understand what flutter is, why it was created, how it works, some really cool features with Flutter and why an AndroiDev today should really give Flutter a good look.
We got so carried away in conversation, that we were forced to break this episode into two parts. Stay tuned for Part 2.
Show Notes
Clue app
Announcing Flutter beta 1
Embedding Flutter into an existing app (examples flutter_view & platform_view)
Stepper widget
Getting started on Flutter (docs)
Compiled vs Interpreted languages
Sponsors
Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding.
Contact
@workingkills [twitter.com]
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Mar 12, 2018 • 55min
117: Multi-Module Builds in Gradle
In this episode, Donn and Kaushik sit down to talk about multi-module builds with Gradle. They talk about how you can separate your build into multiple different modules and how you might go about implementing it. They discuss build performance with incremental compilation, isolation of features, code ownership and how to handle cross-cutting concerns like persistence and networking.
Show Notes
Instant Apps Episode
Android Library Module vs Feature Module
Implementation vs Compile - A Visual Guide
Writing a Modular app in Android
ButterKnife Woes
Android Studio and Pure Java Modules
Sam Edwards buildSrc and build.gradle Autocomplete Post
Sam Edwards Gradle Ext Video
Sam Edwards Gradle AutoComplete
Phil Breault Renaming Gradle Build Files
Google Arch Samples - versions.gradle
Sponsors
Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding.
Contact
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Mar 5, 2018 • 26min
116: Learning Kotlin - inline, noinline, crossinline
In this episode of learning kotlin, we look at 3 important keywords - inline, noinline and crossinline. The inline keyword is super common and you've probably run across this one at some point. What does it mean and when is it useful? We also look at the related but seldom used variants noinline and crossinline.
Show Notes
Kotlin Inline functions
Code Snippets:
Look at the official shownotes page for some code snippets
Misc:
PublishedApi annotation
Matt Logan's post on inline keyword
Ben Daniel Medium post - inline, noinline, crossinline — What do they mean?
Sponsors
Microsoft AppCenter – Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding.
Contact
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Feb 26, 2018 • 1h 5min
115: Architecture Components with Akshay Chordiya
In this episode, we talk about the different parts of Android architecture components. We've had episodes on Room and the paging library, so in this one, we thought we'll touch a little on Lifecycle Owners & Observers, ViewModels, and LiveData. Akshay Chordiya helps break it down. Listen on!
Show Notes
Android Architecture Components
Lifecycle
Handling lifecycles with Lifecycle-Aware Components
Lifecycle Owner
Lifecycle Observer
Best practices for lifecycle-aware components
Caveat: handling onStop events
ViewModels
Architecture Guide: ViewModels
View Model
Code snippet for a ViewModelFactory:
class UserVMFactory(
val user: MyUser
) : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
return when {
modelClass.isAssignableFrom(UserVM::class.java) ->
UserVM(user) as T
else -> throw IllegalArgumentException("Unknown ViewModel class")
}
}
}
LiveData
Live Data
MediatorLiveData
Misc
Android Architecture Components Deep Dive Course on Caster.IO
Fragmented - Room episode with Florina
Fragmented - AAC Paging library with Florina
Sponsors
Microsoft AppCenter - Sign up now on appcenter.ms and spend less time managing your app lifecycle and more time coding.
Contact
@Akshay_Chordiya [twitter.com]
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Feb 19, 2018 • 1h 5min
114: All About CI & CD on App Center w/ Patrick Nikoletich
In this episode, we talk to Patrick Nikoletich from Microsofts App Center team. We explore the intricacies of the Continuous Integration server system on the App Center platform. From what App Center is, all the way down into the weeds to how to get your app building on App Center in a few short steps. We also get into the nitty gritty details around how you can customize your build with build hooks, install utilities and binaries, work with a command line interface, shell scripts, the App Center API much much more. This episode shows a new side of Microsoft that we have not seen in a long time and its a breath of fresh air.
Also, view the show notes at http://fragmentedpodcast.com/episodes/114/
Show Notes
VSTS: https://www.visualstudio.com/team-services/
Microsoft on GitHub: https://github.com/Microsoft
The App Center CLI: https://github.com/Microsoft/appcenter-cli
Azure function that automatically creates branch configurations for PR's and communicates status back to Github.: https://github.com/pniko/function-appcenter-build-
App Center API: https://docs.microsoft.com/en-us/appcenter/api-docs/ & https://openapi.appcenter.ms/
Detox fo React Native Native: https://github.com/wix/detox
Azure Server Functions: https://azure.microsoft.com/en-us/services/functions/
Sponsors
Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Contact
@lbcpat [twitter.com]
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Feb 12, 2018 • 44min
113: Chatting with Pinterest's Christina Lee
In this episode we catch up with a highly energetic but sick Christina Lee about the delightful details in the Pinterest app, delving with the dark side (Swift), giving live coding presentation talks and touching on some Kotlin details like covariance and contravariance. Listen on for a power-packed 40 minutes.
Show Notes
Google IO episode (#84) for Christina's running story
Pinterest app
Calligraphy by Chris Jenkins
Android 8.0 Custom fonts
Material design guidelines
Brio design system by Pinterest's Lin Wang and Thorben Primke
Pinterest stars you should follow on Twitter -> Mallika & Alice
Christina's code from Kotlintown talk
Christina & Huyen presentation from KotlinConf
Sponsors
Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Show Notes
Google IO episode (#84) for Christina's running story
Pinterest app
Calligraphy by Chris Jenkins
Android 8.0 Custom fonts
Material design guidelines
Brio design system by Pinterest's Lin Wang and Thorben Primke
Pinterest stars you should follow on Twitter -> Mallika & Alice
Christina's code from Kotlintown talk
Christina & Huyen presentation from KotlinConf
Sponsors
Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Contact
@runChristinaRun [twitter.com]
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Feb 8, 2018 • 16min
112: Effective Java v3 - Item #9 - Prefer try with resources to try finally
In this mini-fragment episode, Donn talks about Item #9 of the Effective Java (Third Edition) book - Prefer try with resources to try finally.
Please note, this episode references the third edition of the Effective Java book that recently came out. Previously we were doing the entire series on version 2, but we are now upgrading to version 3 of the book. We will not be re-doing any of the existing lessons, but if one was inserted in the mix, then we will do that lesson.
Links
Effective Java (3rd Edition) Book
Sponsors
Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Check them out today at mapbox.com/android
Contact
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Jan 29, 2018 • 14min
111: Effective Java v3 - Item #5 - Prefer Dependency Injection to Hardwiring Resources
In this mini-fragment episode, Donn talks about Item #5 of the Effective Java (Third Edition) book - Prefer Dependency Injection to Hardwiring Resources.
Please note, this episode references the third edition of the Effective Java book that recently came out. Previously we were doing the entire series on version 2, but we are now upgrading to version 3 of the book. We will not be re-doing any of the existing lessons, but if one was inserted in the mix, then we will do that lesson. This is the case with Item #5. We did Item #5 previously for v2 of the book, but v3 introduced a new Item 5 (and bumped the previous Item 5 up to 6).
TLDR; Item #5 is new in the third edition of the Effective Java book. So listen closely. :)
Links
Effective Java (3rd Edition) Book
Sponsors
Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Check them out today at mapbox.com/android
Contact
@fragmentedcast [twitter.com]
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Jan 22, 2018 • 42min
110: BuddyBuild and CI/CD services
In this episode of Fragmented, we talk about CI, CD and CD services. That's Continuous Integration, Continuous Delivery, and Continuous Deployment. BuddyBuild a beloved 3rd party service of ours (and previous sponsor) is sunsetting their Android service, so Donn and KG discuss alternatives and the options they've been keeping an eye on.
Listen on:
Download directly
Show Notes
BuddyBuild is now part of Apple
Google buys Sparrow
Differences between CI/CDs services
Good article on CI
Nice infomatic explaining CD vs CD
Options for CI Services
Jenkins
CloudBees - enterprise Jenkins
Bitrise
Bitrise and Firebase test lab
NeverCode
Welcoming Android developers blog post by NeverCode
Microsoft AppCenter
Ep 104 - Donn talks to the Samina from AppCenter
Circle CI
2.0 docs
Testing with Firebase test lab
Team City - Jetbrains
Code Ship
Sponsors
Mapbox - - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Check them out today at mapbox.com/android
Contact
@fragmentedcast [twitter.com]
@ryanjsalva
@donnfelker and 📷 donnfelker
@kaushikgopal and 📷 kaushikgopal

Jan 16, 2018 • 23min
109: Learning Kotlin - Sequences the new Iterables
In this episode of Fragmented, we go back to learning some Kotlin and look at the Iterable like data structure introduced called "Sequences". What is a sequence? How is it different from Iterable? When should I use it?
Show Notes
Kotlin Sequence
Java Iterable vs Iterator - stackoverflow.com
Eager/Lazy
Eager evaluation:
val lst = listOf(1, 2)
val lstMapped: List = lst.map { print("$it "); it * it }
print("before sum ")
val sum = lstMapped.sum()
// prints "1 2 before sum"
Lazy evaluation:
val seq = sequenceOf(1, 2)
val seqMapped: Sequence = seq.map { print("$it "); it * it }
print("before sum ")
val sum = seqMapped.sum()
// prints "before sum 1 2"
Source stackoverflow.com answer
Intermediate and terminal operations
Notice that at each chain operation, a new temporary list is created:
data class Person(val name: String, val age: Int)
fun main(args: Array) {
val people =
listOf(Person("Chris Martin", 31),
Person("Will Champion", 32),
Person("Jonny Buckland", 33),
Person("Guy Berryman", 34),
Person("Mhris Cartin", 30))
println(people
.filter { it.age > 30 } // new temp. list
.map {
it.name.split(" ").map {it[0]}.joinToString("")
} // new temp. list
.map { it.toUpperCase() }) // new temp. list
}
Using a sequence:
println(people
.asSequence() // convert to sequence
.filter { it.age > 30 } // lazy eval (intermediate op)
.map {
it.name.split(" ").map {it[0]}.joinToString("")
} // lazy eval (intermediate op)
.map { it.toUpperCase() } // lazy eval (intermediate op)
.toList() // terminal operation
)
Without a terminal operation, Sequences won't print anything:
val seq = sequenceOf(1, 2, 3)
println(seq) // prints address
println(seq.toList()) // [1, 2, 3]
You can't pick an index from a sequence:
println(seq[0]) // throws ERROR "No get method providing array access"
println(seq.toList()[0]) // 1
Sponsors
Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
Check them out today at mapbox.com/android
Contact
@fragmentedcast [twitter.com]
@donnfelker and +DonnFelker
@kaushikgopal and +KaushikGopalIsMe