{"id":14081,"url":"https://github.com/amitshekhariitbhu/awesome-android-complete-reference","name":"awesome-android-complete-reference","description":"Here I list down all of the high-quality blogs that I publish on my website.","projects_count":94,"last_synced_at":"2026-08-28T01:00:35.523Z","repository":{"id":44389833,"uuid":"61170304","full_name":"amitshekhariitbhu/awesome-android-complete-reference","owner":"amitshekhariitbhu","description":"Here I list down all of the high-quality blogs that I publish on my website.","archived":false,"fork":false,"pushed_at":"2026-01-28T09:27:17.000Z","size":278,"stargazers_count":2859,"open_issues_count":7,"forks_count":653,"subscribers_count":184,"default_branch":"master","last_synced_at":"2026-08-08T19:34:52.523Z","etag":null,"topics":["android","android-optimization","best-practices","blogs","kotlin","performance","tutorial","tutorials"],"latest_commit_sha":null,"homepage":"https://outcomeschool.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amitshekhariitbhu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-06-15T02:13:26.000Z","updated_at":"2026-08-08T19:10:40.000Z","dependencies_parsed_at":"2026-02-14T10:02:21.658Z","dependency_job_id":null,"html_url":"https://github.com/amitshekhariitbhu/awesome-android-complete-reference","commit_stats":{"total_commits":239,"total_committers":10,"mean_commits":23.9,"dds":0.05857740585774063,"last_synced_commit":"9dbf957272da0b274e1185a291737b93ce42bd33"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/amitshekhariitbhu/awesome-android-complete-reference","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitshekhariitbhu%2Fawesome-android-complete-reference","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitshekhariitbhu%2Fawesome-android-complete-reference/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitshekhariitbhu%2Fawesome-android-complete-reference/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitshekhariitbhu%2Fawesome-android-complete-reference/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amitshekhariitbhu","download_url":"https://codeload.github.com/amitshekhariitbhu/awesome-android-complete-reference/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amitshekhariitbhu%2Fawesome-android-complete-reference/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36947907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-08-27T02:00:07.166Z","response_time":96,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"created_at":"2024-01-12T20:23:53.029Z","updated_at":"2026-08-28T01:00:35.523Z","primary_language":null,"list_of_lists":false,"displayable":true,"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"# Awesome Android Complete Reference\n\nHere I list down all of the high-quality blogs that I publish on my website. \n\n[Outcome School](https://outcomeschool.com)\n\nI only create knowledge-packed content so that you get to learn about the following:\n- How do things work in Android internally?\n- How can you improve the performance of your Android Application?\n- Mobile System Design\n- Coding best practices\n\n### All blogs\n\n- [Mastering Kotlin Coroutines](https://outcomeschool.com/blog/kotlin-coroutines) - Mastering Kotlin Coroutines\n- [Why does an Android App lag?](https://outcomeschool.com/blog/android-app-lag) - Learn why an Android App lags\n- [Android System Design Interviews](https://outcomeschool.com/blog/android-system-design-interviews) - Android System Design Interviews\n- [OkHttp Interceptor](https://outcomeschool.com/blog/okhttp-interceptor) - OkHttp Interceptor\n- [Caching in Android](https://outcomeschool.com/blog/caching-with-okhttp-interceptor-and-retrofit) - Caching with OkHttp Interceptor and Retrofit\n- [How does the Android Image Loading library use the bitmap pool for responsive UI?](https://outcomeschool.com/blog/android-image-loading-library-use-bitmap-pool-for-responsive-ui) - How does the Android Image Loading library use the bitmap pool for responsive UI?\n- [How does the Android Image Loading library solve the slow loading issue?](https://outcomeschool.com/blog/android-image-loading-library-solve-the-slow-loading-issue) - How does the Android Image Loading library solve the slow loading issue?\n- [How does the Android Image Loading library optimize memory usage?](https://outcomeschool.com/blog/android-image-loading-library-optimize-memory-usage) - How does the Android Image Loading library optimize memory usage?\n- [Dalvik, ART, JIT, and AOT in Android](https://outcomeschool.com/blog/dalvik-art-jit-aot) - Dalvik, ART, JIT, and AOT in Android\n- [Launch vs Async in Kotlin Coroutines](https://outcomeschool.com/blog/launch-vs-async-in-kotlin-coroutines) - Launch vs Async in Kotlin Coroutines\n- [CoroutineContext in Kotlin](https://outcomeschool.com/blog/coroutinecontext-in-kotlin) - CoroutineContext in Kotlin\n- [Dispatchers in Kotlin Coroutines](https://outcomeschool.com/blog/dispatchers-in-kotlin-coroutines) - Dispatchers in Kotlin Coroutines\n- [coroutineScope vs supervisorScope](https://outcomeschool.com/blog/coroutinescope-vs-supervisorscope) - coroutineScope vs supervisorScope\n- [What is Flow API in Kotlin?](https://outcomeschool.com/blog/flow-api-in-kotlin) - What is Flow API in Kotlin?\n- [Cold Flow vs Hot Flow](https://outcomeschool.com/blog/cold-flow-vs-hot-flow) - Cold Flow vs Hot Flow\n- [StateFlow and SharedFlow](https://outcomeschool.com/blog/stateflow-and-sharedflow) - StateFlow and SharedFlow\n- [Suspending vs Blocking in Kotlin Coroutines](https://www.youtube.com/watch?v=V2lL_aJp17I) - Suspending vs Blocking in Kotlin Coroutines\n- [HTTP Request vs HTTP Long-Polling vs WebSocket vs Server-Sent Events](https://outcomeschool.com/blog/http-request-long-polling-websocket-sse) - HTTP Request vs HTTP Long-Polling vs WebSocket vs Server-Sent Events\n- [Context In Android Application](https://outcomeschool.com/blog/context-in-android-application) - Context In Android Application\n- [Long-running tasks in parallel with Kotlin Flow](https://outcomeschool.com/blog/long-running-tasks-in-parallel-with-kotlin-flow) - Long-running tasks in parallel with Kotlin Flow\n- [Retry Operator in Kotlin Flow](https://outcomeschool.com/blog/retry-operator-in-kotlin-flow) - Retry Operator in Kotlin Flow\n- [Callback to Coroutines in Kotlin](https://outcomeschool.com/blog/callback-to-coroutines-in-kotlin) - Callback to Coroutines in Kotlin\n- [Retrofit with Kotlin Flow](https://outcomeschool.com/blog/retrofit-with-kotlin-flow) - Retrofit with Kotlin Flow\n- [Room Database with Kotlin Flow](https://outcomeschool.com/blog/room-database-with-kotlin-flow) - Room Database with Kotlin Flow\n- [Room Database with Kotlin Coroutines](https://outcomeschool.com/blog/room-database-with-kotlin-coroutines) - Room Database with Kotlin Coroutines\n- [Kotlin Flow Zip Operator for Parallel Multiple Network Calls](https://outcomeschool.com/blog/kotlin-flow-zip-operator-parallel-multiple-network-calls) - Kotlin Flow Zip Operator for Parallel Multiple Network Calls\n- [Instant Search Using Kotlin Flow Operators](https://outcomeschool.com/blog/instant-search-using-kotlin-flow-operators) - Instant Search Using Kotlin Flow Operators\n- [Exception Handling in Kotlin Flow](https://outcomeschool.com/blog/exception-handling-in-kotlin-flow) - Exception Handling in Kotlin Flow\n- [callbackFlow - Callback to Flow API in Kotlin](https://outcomeschool.com/blog/callback-to-flow-api-in-kotlin) - callbackFlow - Callback to Flow API in Kotlin\n- [Kotlin withContext vs Async-await](https://outcomeschool.com/blog/kotlin-withcontext-vs-async-await) - Kotlin withContext vs Async-await\n- [Terminal Operators in Kotlin Flow](https://outcomeschool.com/blog/terminal-operators-in-kotlin-flow) - Terminal Operators in Kotlin Flow\n- [Remove duplicates from an array](https://outcomeschool.com/blog/remove-duplicates-from-an-array-in-kotlin) - Remove duplicates from an array in Kotlin\n- [JvmStatic Annotation in Kotlin](https://outcomeschool.com/blog/jvmstatic-annotation-in-kotlin) - JvmStatic Annotation in Kotlin\n- [JvmOverloads Annotation in Kotlin](https://outcomeschool.com/blog/jvmoverloads-annotation-in-kotlin) - JvmOverloads Annotation in Kotlin\n- [JvmField Annotation in Kotlin](https://outcomeschool.com/blog/jvmfield-annotation-in-kotlin) - JvmField Annotation in Kotlin\n- [inline function in Kotlin](https://outcomeschool.com/blog/inline-function-in-kotlin) - inline function in Kotlin\n- [noinline in Kotlin](https://outcomeschool.com/blog/noinline-in-kotlin) - noinline in Kotlin\n- [crossinline in Kotlin](https://outcomeschool.com/blog/crossinline-in-kotlin) - crossinline in Kotlin\n- [lateinit vs lazy in Kotlin](https://outcomeschool.com/blog/lateinit-vs-lazy-in-kotlin) - lateinit vs lazy in Kotlin\n- [init block in Kotlin](https://outcomeschool.com/blog/init-block-in-kotlin) - init block in Kotlin\n- [Retrofit with Kotlin Coroutines](https://outcomeschool.com/blog/retrofit-with-kotlin-coroutines) - Retrofit with Kotlin Coroutines\n- [Advantage of using const in Kotlin](https://outcomeschool.com/blog/const-in-kotlin) - Advantage of using const in Kotlin\n- [suspend function in Kotlin Coroutines](https://outcomeschool.com/blog/suspend-function-in-kotlin-coroutines) - suspend function in Kotlin Coroutines\n- [Higher-Order Functions and Lambdas in Kotlin](https://outcomeschool.com/blog/higher-order-functions-and-lambdas-in-kotlin) - Higher-Order Functions and Lambdas in Kotlin\n- [Parallel Multiple Network Calls Using Kotlin Coroutines](https://outcomeschool.com/blog/parallel-multiple-network-calls-using-kotlin-coroutines) - Parallel Multiple Network Calls Using Kotlin Coroutines\n- [MVVM Architecture - Android Tutorial for Beginners](https://outcomeschool.com/blog/mvvm-architecture-android) - MVVM Architecture - Android Tutorial for Beginners\n- [Why is it recommended to use only the default constructor to create a Fragment?](https://outcomeschool.com/blog/default-constructor-to-create-a-fragment) - Why is it recommended to use only the default constructor to create a Fragment? \n- [AssociateBy - List to Map in Kotlin](https://outcomeschool.com/blog/associateby-list-to-map-in-kotlin) - Kotlin Collection Functions - associateBy that converts a list into a map\n- [partition - filtering function in Kotlin](https://outcomeschool.com/blog/partition-filtering-function-in-kotlin) - partition - filtering function in Kotlin\n- [Avoid nesting by handling errors first](https://outcomeschool.com/blog/avoid-nesting-by-handling-errors-first) - Avoid nesting by handling errors first\n- [Infix notation in Kotlin](https://outcomeschool.com/blog/infix-notation-in-kotlin) - Infix notation in Kotlin\n- [Open keyword in Kotlin](https://outcomeschool.com/blog/open-keyword-in-kotlin) - Open keyword in Kotlin\n- [Companion object in Kotlin](https://outcomeschool.com/blog/companion-object-in-kotlin) - Companion object in Kotlin\n- [Use setRecycledViewPool for Optimizing Nested RecyclerView](https://outcomeschool.com/blog/setrecycledviewpool-for-optimizing-nested-recyclerview) - Use setRecycledViewPool for Optimizing Nested RecyclerView\n- [singleTask launchMode in Android](https://outcomeschool.com/blog/singletask-launchmode-in-android) - singleTask launchMode in Android\n- [RxJava Subject - Publish, Replay, Behavior, and Async](https://outcomeschool.com/blog/rxjava-subject-publish-replay-behavior-async) - RxJava Subject - Publish, Replay, Behavior, and Async\n- [dispose vs clear](https://outcomeschool.com/blog/dispose-vs-clear-compositedisposable-rxjava) - dispose vs clear CompositeDisposable RxJava\n- [RxJava Interval Operator](https://outcomeschool.com/blog/rxjava-interval-operator) - RxJava Interval Operator\n- [RxJava Concat Operator](https://outcomeschool.com/blog/rxjava-concat-operator) - RxJava Concat Operator\n- [RxJava Merge Operator](https://outcomeschool.com/blog/rxjava-merge-operator) - RxJava Merge Operator\n- [RxJava Operator Map vs FlatMap](https://outcomeschool.com/blog/rxjava-map-vs-flatmap) - RxJava Operator Map vs FlatMap\n- [Pagination In RecyclerView Using RxJava Operators](https://outcomeschool.com/blog/pagination-in-recyclerview-using-rxjava-operators) - Pagination In RecyclerView Using RxJava Operators\n- [How does the Kotlin Multiplatform work?](https://outcomeschool.com/blog/how-does-the-kotlin-multiplatform-work) - How does the Kotlin Multiplatform work?\n- [RxJava Zip Operator](https://outcomeschool.com/blog/rxjava-zip-operator) - RxJava Zip Operator\n- [RxJava Create and fromCallable Operator](https://outcomeschool.com/blog/rxjava-create-and-fromcallable-operator) - RxJava Create and fromCallable Operator\n- [RxJava Defer Operator](https://outcomeschool.com/blog/rxjava-defer-operator) - RxJava Defer Operator\n- [RecyclerView Optimization](https://outcomeschool.com/blog/recyclerview-optimization) - RecyclerView Optimization - Scrolling Performance Improvement\n- [Android Developer should know these Data Structures for Next Interview](https://outcomeschool.com/blog/android-developer-should-know-these-data-structures-for-next-interview) - Android Developer should know these Data Structures for Next Interview\n- [Google Android Developer Interview](https://outcomeschool.com/blog/google-android-developer-interview) - Google Android Developer Interview\n- [Creating Flow Using Flow Builder in Kotlin](https://outcomeschool.com/blog/creating-flow-using-flow-builder-in-kotlin) - Creating Flow Using Flow Builder in Kotlin\n- [Unit Testing ViewModel with Kotlin Coroutines and LiveData](https://outcomeschool.com/blog/unit-testing-viewmodel-with-kotlin-coroutines-and-livedata) - Unit Testing ViewModel with Kotlin Coroutines and LiveData\n- [Unit Testing ViewModel with Kotlin Flow and StateFlow](https://outcomeschool.com/blog/unit-testing-viewmodel-with-kotlin-flow-and-stateflow) - Unit Testing ViewModel with Kotlin Flow and StateFlow\n- [ThreadPoolExecutor in Android](https://outcomeschool.com/blog/threadpoolexecutor-in-android) - ThreadPoolExecutor in Android\n- [Creating Custom Annotations](https://outcomeschool.com/blog/creating-custom-annotations) - Creating Custom Annotations\n- [App Startup Library](https://outcomeschool.com/blog/app-startup-library) - App Startup Library\n- [Instant Search Using RxJava Operators](https://outcomeschool.com/blog/instant-search-using-rxjava-operators) - Instant Search Using RxJava Operators\n- [Jetpack DataStore Preferences](https://outcomeschool.com/blog/jetpack-datastore-preferences) - Jetpack DataStore Preferences\n- [Optimization Using ArrayMap and SparseArray](https://outcomeschool.com/blog/optimization-using-arraymap-and-sparsearray) - Optimization Using ArrayMap and SparseArray\n- [StrictMode in Android Development](https://outcomeschool.com/blog/strictmode-in-android-development) - StrictMode in Android Development\n- [Android Development Best Practices](https://outcomeschool.com/blog/android-development-best-practices) - Android Development Best Practices\n- [SnapHelper](https://outcomeschool.com/blog/snaphelper) - SnapHelper\n- [Android NDK and RenderScript](https://outcomeschool.com/blog/ndk-and-renderscript) - Android NDK and RenderScript\n- [Android App Performance Metrics](https://outcomeschool.com/blog/android-app-performance-metrics) - Android App Performance Metrics\n- [Difference between == and === in Kotlin](https://outcomeschool.com/blog/structural-and-referential-equality-in-kotlin) - Difference between == and === in Kotlin\n- [React Native vs Flutter](https://outcomeschool.com/blog/react-native-vs-flutter) - React Native vs Flutter\n- [Database Normalization vs Denormalization](https://outcomeschool.com/blog/database-normalization-vs-denormalization) - Database Normalization vs Denormalization\n- [Extension function in Kotlin](https://outcomeschool.com/blog/extension-function-in-kotlin) - Extension function in Kotlin\n- [data class in Kotlin](https://outcomeschool.com/blog/data-class-in-kotlin) - data class in Kotlin\n- [String vs StringBuffer vs StringBuilder](https://outcomeschool.com/blog/string-vs-stringbuffer-vs-stringbuilder) - String vs StringBuffer vs StringBuilder\n- [Parcelable vs Serializable](https://outcomeschool.com/blog/parcelable-vs-serializable) - Parcelable vs Serializable\n\n\nThanks\n\n**Amit Shekhar**\\\nFounder @ [Outcome School](https://outcomeschool.com)\n\nYou can connect with me on:\n\n- [Twitter](https://twitter.com/amitiitbhu)\n- [YouTube](https://www.youtube.com/@amitshekhar)\n- [LinkedIn](https://www.linkedin.com/in/amit-shekhar-iitbhu)\n- [GitHub](https://github.com/amitshekhariitbhu)\n\n[**Read all of our blogs here.**](https://outcomeschool.com/blog)\n","projects_url":"https://awesome.ecosyste.ms/api/v1/lists/amitshekhariitbhu%2Fawesome-android-complete-reference/projects"}