Ioannis Anifantakis
Software Engineer
Articles
2025
Programming *The Liskov Substitution Principle (LSP) in Kotlin — Deep Dive
In Short: Subclasses Should Behave Like Their Parents. Lets deep dive on the 3rd of the SOLID Principles
2025
Android *Faking Network Responses with MockK (Featuring Ktor)
A practical guide to mocking network responses in Kotlin. Make your tests faster and more reliable using MockK, with real-world examples
2025
Android *Coroutine Suspension Mechanics: The Finite State Machine within
Let’s gaze inside a Kotlin Coroutine structure and see the Finite State Machine (FSM) inside it. Suspension mechanics revealed.
2025
Android *Composition Locals in Jetpack Compose: A Beginner-to-Advanced Guide
Did you ever need to pass irrelevant parameters through multiple composable functions just to forward a parameter down the composable tree somewhere? CompositionLocals provide the solution to that problem.
2025
Android *Mastering Kotlin Coroutine Channels in Android: From Basics to Advanced Patterns
Learn coroutine communication patterns, from basic producer-consumer to advanced fan-in/fan-out scenarios, to ui events in Android development.
2025
Android *The One Script to Rule Them All: Android Project Cleanup Made Easy
A comprehensive script that automates project cleanup, handling both single and multi-module projects with support for macOS, Linux, and Windows.
2024
Android *The Evolution of Android Architecture Patterns: From UI-Centric to MVC to MVP to MVVM to MVI
From God Activities to MVI: A journey through Android's architectural evolution, showing how each pattern solved its predecessor's limitations.
2024
AndroidSurviving Process Death Without Permanent Storage: Ephemeral Persistence for Both StateHolders and ViewModels
If the system kills your app in the background and later re-creates it, you often need to restore some temporary data (ephemeral state) without storing it permanently on disk. In this article, we’ll show two approaches:
2024
Android *Mastering Global State Management in Android with Jetpack Compose
As Android developers, we often face the challenge of managing state across our applications. Whether it’s user authentication, theme preferences, or app-wide settings, having a reliable way to handle global state is crucial.
2024
AndroidHow to Locally Test Your Android or KMM Library Using Maven Local
You build a library and want to test it locally with an actual project before publishing online? Check out my new guide to learn how to publish your Android/Kotlin/Java library to a local Maven repository on your own machine for instant testing with sample apps.
2024
Android *Handling One-Time Events in Jetpack Compose: Channels vs. SharedFlow
Struggling to handle one-time events in Jetpack Compose? Discover why Channels beat SharedFlow for ephemeral triggers, and how to ensure your UI reacts just once, every time.
2024
Android *Bridging the Gap Between Jetpack Compose State and StateFlow for Reactive UI
Check out my short guide on how to seamlessly bring StateFlow’s thread-safe updates into Compose’s classic State handling. Learn how a simple extension function can give you the best of both worlds—powerful concurrency features and the elegance of delegated state in your Compose UI!
2024
AndroidSecureAndroidPersist — Android Persistence and Encryption Library
The Android Secure Persist Library is a powerful Kotlin library designed to provide secure and efficient storage of preferences and raw data encryption for Android applications, all with zero configuration.
2024
AndroidJetpack Compose Navigation: Embracing Type Safety and Simplifying Parcelable Handling with NavHelper library
NavHelper library to streamline type-safe Parcelable data passing in Jetpack Compose's new Navigation, showcasing the power and flexibility of the type safety introduced at Google I/O '24.
2021
AndroidJetpack Compose — Building a RecyclerView with StickyHeader
Create full-featured RecyclerView using LazyColumn with minimal code and effort thanks to Jetpack Compose!
2021
AndroidThe Android Context, Manifest, and the Android System
What is Android Context? What is the Android Manifest? How do they relate to the Android System?
2020
Deep LearningDeep RL: DQN — Regression or Classification?
Providing basic understanding behind a regression approach to a classification problem in DQNs action values.
2019
Reinforcement LearningReinforcement Learning — Basic Understanding
Understanding the basic concepts behind Reinforcement Learning using value-based methods.
2019
Deep LearningIntroduction to Deep Learning Theory (video-tutorial)
An easy to absorb introduction to Machine Learning and Neural Networks with YouTube video content
2019
AndroidAndroid webview scroll and facebook comments problem when Admob loads advert
There is bizarre behavior in Android when you combine a “WebView” together with “AdMob”. Read my solution...
2019
WebWhat is AMP — Accelerated Mobile Pages
So what is AMP? How will it change our website? Is it any useful? What is the architecture behind it? How can I build an AMP website?
2019
JavaWhat is a static variable in Java
All Java newbies at some point looked for some clear and direct explanation over Static variables. Here it is!
2019
Java - AndroidJava Interfaces — Listeners: Example of an Activity using AsyncTask in a separate file
This article is describing a common pattern widely used in Android Development, like creating a clickListener for items in a recycler view.
* Certain articles are adopted by certain publications:
- Droidcon’s publications ProAndroidDev for Android Specific articles.
- ITNEXT for software development posts not directly related to android