From 796d9a56b8d08727a422d0c778d48ddd05e6a023 Mon Sep 17 00:00:00 2001 From: Janishar Ali Date: Thu, 1 Dec 2022 01:33:02 +0530 Subject: [PATCH] add amit blog redirection --- .../index.html | 3112 +---------------- .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 2870 +-------------- .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + exception-handling-in-kotlin-flow/index.html | 1 + .../index.html | 1 + good-code-vs-bad-code-263f71e867c1/index.html | 1 + google-android-developer-interview/index.html | 1 + .../index.html | 217 +- .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + jetpack-datastore-preferences/index.html | 675 +--- .../index.html | 1 + .../index.html | 1 + kotlin-withcontext-vs-async-await/index.html | 1 + learn-kotlin-lateinit-vs-lazy/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + my-first-blog/index.html | 1 + need-for-the-app-startup-library/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + recyclerview-optimization/index.html | 1 + .../index.html | 1 + .../index.html | 1 + rxjava-operator-concat-vs-merge/index.html | 1 + .../index.html | 656 +--- .../index.html | 1 + .../index.html | 1 + terminal-operators-in-kotlin-flow/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 605 +--- .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + 87 files changed, 87 insertions(+), 8129 deletions(-) create mode 100644 a-complete-guide-to-learn-kotlin-for-android-development-b1e5d23cc2d8/index.html create mode 100644 a-complete-guide-to-learn-rxjava-b55c0cea3631/index.html create mode 100644 android-activity-launchmode-explained-cbc6cf996802/index.html create mode 100644 android-amazing-open-source-apps-e44f520593cc/index.html create mode 100644 android-app-optimization-using-arraymap-and-sparsearray-f2b4e2e3dc47/index.html create mode 100644 android-app-performance-metrics-a1176334186e/index.html create mode 100644 android-app-performance-tips-smooth-running-android-app/index.html create mode 100644 android-code-style-and-guidelines-d5f80453d5c7/index.html create mode 100644 android-developer-should-know-these-data-structures-for-next-interview/index.html create mode 100644 android-development-best-practices-83c94b027fd3/index.html create mode 100644 android-development-useful-tools-fd73283e82e3/index.html create mode 100644 android-interview-questions-7270092be277/index.html create mode 100644 android-memory-leaks-inputmethodmanager-solved/index.html create mode 100644 android-package-name-vs-application-id-ad95b08815a6/index.html create mode 100644 android-tensorflow-machine-learning-example-ff0e9b2654cc/index.html create mode 100644 awesome-android-complete-references-at-one-place/index.html create mode 100644 awesome-android-open-source-libraries-56a008c776c0/index.html create mode 100644 battery-optimization-for-android-apps-f4ef6170ff70/index.html create mode 100644 best-articles-on-android-that-we-published-in-2016-5131a23c43af/index.html create mode 100644 best-articles-on-android-that-we-published-in-2017-4972a2578b77/index.html create mode 100644 comparing-android-ndk-and-renderscript-1a718c01f6fe/index.html create mode 100644 creating-custom-annotations-in-android-a855c5b43ed9/index.html create mode 100644 creating-custom-model-for-android-using-tensorflow-3f963d270bfb/index.html create mode 100644 creating-flow-using-flow-builder-in-kotlin/index.html create mode 100644 debugging-android-databases-and-shared-preferences-in-the-easiest-way-e5f705dfc06b/index.html create mode 100644 droid-flight-initiative-to-promote-android-learning/index.html create mode 100644 every-programmer-should-read-this-book-6755dedec78d/index.html create mode 100644 exception-handling-in-kotlin-flow/index.html create mode 100644 from-civil-engineer-to-software-developer/index.html create mode 100644 good-code-vs-bad-code-263f71e867c1/index.html create mode 100644 google-android-developer-interview/index.html create mode 100644 how-the-android-image-loading-library-glide-and-fresco-works-962bc9d1cc40/index.html create mode 100644 how-to-become-a-complete-android-developer-110d7ef91f2a/index.html create mode 100644 how-to-download-a-file-in-android-and-show-the-progress-very-easily/index.html create mode 100644 how-to-learn-android-development-f33dd6dba40d/index.html create mode 100644 how-to-use-bitmap-pool-in-android-56c71a55533c/index.html create mode 100644 i-have-1-year-of-experience-in-android-now-what-52d955b08027/index.html create mode 100644 implement-caching-in-android-using-rxjava-operators/index.html create mode 100644 implement-search-using-rxjava-operators-c8882b64fe1d/index.html create mode 100644 implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8/index.html create mode 100644 improve-your-android-coding-through-annotations-26b3273c137a/index.html create mode 100644 instant-search-using-kotlin-flow-operators/index.html create mode 100644 kotlin-flow-retry-operator-with-exponential-backoff-delay/index.html create mode 100644 kotlin-flow-zip-operator-parallel-multiple-network-calls/index.html create mode 100644 kotlin-withcontext-vs-async-await/index.html create mode 100644 learn-kotlin-lateinit-vs-lazy/index.html create mode 100644 mastering-kotlin-coroutines-in-android-step-by-step-guide/index.html create mode 100644 migrating-from-rxjava1-to-rxjava2-5dac0a94b4aa/index.html create mode 100644 mvvm-architecture-android-tutorial-for-beginners-step-by-step-guide/index.html create mode 100644 my-first-blog/index.html create mode 100644 need-for-the-app-startup-library/index.html create mode 100644 okhttp-interceptor-making-the-most-of-it/index.html create mode 100644 parallel-multiple-network-calls-using-kotlin-coroutines/index.html create mode 100644 prdownloader-a-file-downloader-library-for-android-b9c5fc56a640/index.html create mode 100644 recyclerview-optimization/index.html create mode 100644 room-database-with-kotlin-coroutines-in-android/index.html create mode 100644 rxjava-fast-android-networking-6e3d90ee4387/index.html create mode 100644 rxjava-operator-concat-vs-merge/index.html create mode 100644 simple-and-fast-android-networking-19ed860d1455/index.html create mode 100644 suspend-function-in-kotlin-coroutines/index.html create mode 100644 terminal-operators-in-kotlin-flow/index.html create mode 100644 thank-you-note-from-your-mindorks-community-e2f94e7055aa/index.html create mode 100644 the-new-dagger-2-android-injector-cbe7d55afa6a/index.html create mode 100644 threadpoolexecutor-in-android-8e9d22330ee3/index.html create mode 100644 understanding-context-in-android-application-330913e32514/index.html create mode 100644 understanding-higher-order-functions-and-lambdas-in-kotlin/index.html create mode 100644 understanding-inline-noinline-and-crossinline-in-kotlin/index.html create mode 100644 understanding-rxjava-create-and-fromcallable-operator/index.html create mode 100644 understanding-rxjava-defer-operator/index.html create mode 100644 understanding-rxjava-timer-delay-and-interval-operators/index.html create mode 100644 understanding-rxjava-zip-operator-with-example/index.html create mode 100644 understanding-types-of-observables-in-rxjava-6c3a2d0819c8/index.html create mode 100644 unit-testing-viewmodel-with-kotlin-coroutines-and-livedata/index.html create mode 100644 use-strictmode-to-find-things-you-did-by-accident-in-android-development-4cf0e7c8d997/index.html create mode 100644 using-constraint-layout-in-android-531e68019cd/index.html create mode 100644 using-snaphelper-in-recyclerview-fc616b6833e8/index.html create mode 100644 what-are-coroutines-in-kotlin-bf4fecd476e9/index.html create mode 100644 why-consider-flatbuffer-over-json-2e4aa8d4ed07/index.html create mode 100644 why-every-developer-should-write-blog-b2597116ffed/index.html create mode 100644 why-use-facebooks-android-device-year-class-library-e5f38a14a3b9/index.html create mode 100644 why-you-must-try-kotlin-for-android-development-e14d00c8084b/index.html diff --git a/a-complete-guide-to-learn-dagger-2-b4c7a570d99c/index.html b/a-complete-guide-to-learn-dagger-2-b4c7a570d99c/index.html index acf8317..90dfd04 100644 --- a/a-complete-guide-to-learn-dagger-2-b4c7a570d99c/index.html +++ b/a-complete-guide-to-learn-dagger-2-b4c7a570d99c/index.html @@ -1,3111 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GitHub - amitshekhariitbhu/android-developer-roadmap: Android Developer Roadmap - A complete roadmap to learn Android App Development - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - Skip to content - - - - - - - - -
-
-
-
- -
- - -
-
-
- - -
-

- amitshekhariitbhu/android-developer-roadmap -

-
-
-
-
- - - -
-
-
-
-
- - - - master - - - - -
-
-
- - Switch branches/tags - - -
- - -
- -
-
- - -
-
- - - - - - - -
- -
-
-
-
-
-
-
- -
-
-
-

- Name already in use -

-
-
- -
-
-
-
-
- A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? -
-
-
- - -
-
-
- -
-
- - - - -
- - Code - - - -
- -
-
-
-
-
-
-
-

- Latest commit -

-
-
-
- -
-
- -
- -
- - 8764d79 - -
-
-
-

- Git stats -

- -
-
-
-

- Files -

- - Permalink - -
- - Failed to load latest commit information. -
-
-
-
-
- Type -
-
- Name -
-
- Latest commit message -
-
- Commit time -
-
-
-
- -
- - -
- - Nov 28, 2022 - -
-
-
-
- -
-
- - - assets - - -
- -
- - Nov 28, 2022 - -
-
-
-
- -
-
- - - others - - -
- -
- - Jul 29, 2019 - -
-
-
-
- -
- - -
- - Nov 28, 2022 - -
-
-
-
- -
- - -
- - Jul 28, 2019 - -
-
-
-
- -
- - -
- - Nov 28, 2022 - -
-
-
- -
-
- -
- -
-
-

- - Android Developer Roadmap - -

-

- - Android Developer Roadmap -

-
-

- A complete roadmap to learn Android App Development. This roadmap will help you in becoming a complete Android Developer. -

-
-

- - Note: All the resources to learn all of the concepts in the roadmap will be provided on - - Blog by Amit Shekhar - -

-

- - - Get Mentorship: - - amitshekhar.me - - -

-

- - Roadmap to learn Android App Development -

-
    -
  • - Programming -
      -
    • - Java -
    • -
    • - Kotlin -
    • -
    -
  • -
  • - Android Studio -
      -
    • - Android Studio IDE Overview -
    • -
    • - Project Structure -
        -
      • - Java/Kotlin -
      • -
      • - XML -
      • -
      • - .gradle files -
      • -
      -
    • -
    -
  • -
  • - Android Component -
      -
    • - Activity -
        -
      • - Activity Lifecycle -
      • -
      • - Tasks & Back Stack -
      • -
      -
    • -
    • - Service -
    • -
    • - Broadcast Receiver -
    • -
    • - Content Provider -
    • -
    -
  • -
  • - Intents -
      -
    • - Types of Intent -
        -
      • - Implicit -
      • -
      • - Explicit -
      • -
      -
    • -
    • - Intent Filter -
    • -
    -
  • -
  • - Static User Interface -
      -
    • - View -
        -
      • - Button, ImageView, TextView, EditText etc -
      • -
      -
    • -
    • - ViewGroup -
        -
      • - LinearLayout, RelativeLayout, FrameLayout, ConstraintLayout -
      • -
      -
    • -
    -
  • -
  • - Dynamic User Interface -
      -
    • - RecyclerView -
    • -
    • - ViewPager -
    • -
    • - Spinner -
    • -
    -
  • -
  • - CustomView -
      -
    • - Canvas -
    • -
    • - Bitmap -
    • -
    • - Paint -
    • -
    -
  • -
  • - UI Resources -
      -
    • - Drawables -
    • -
    • - String -
    • -
    • - Styles -
    • -
    -
  • -
  • - Fragments -
      -
    • - Fragment Lifecycle -
    • -
    • - Fragment Manager -
    • -
    -
  • -
  • - Support User Interface -
      -
    • - ProgressBar -
    • -
    • - Dialogs -
    • -
    • - Toast & Snackbar -
    • -
    -
  • -
  • - Storage -
      -
    • - Shared Preferences -
    • -
    • - File Systems -
    • -
    • - Database -
        -
      • - RoomDB -
      • -
      -
    • -
    -
  • -
  • - Build -
      -
    • - Gradle -
    • -
    • - Debug / Release Configuration -
    • -
    -
  • -
  • - Threading -
      -
    • - Thread -
    • -
    • - Handler/Looper -
    • -
    • - ThreadPoolExecutor -
    • -
    • - RxJava -
    • -
    • - Coroutines/Flow -
    • -
    • - WorkManager -
    • -
    -
  • -
  • - Debugging -
      -
    • - Memory profiling -
    • -
    • - Logging -
    • -
    • - Systrace -
    • -
    • - Exceptions -
    • -
    • - Error Handling -
    • -
    -
  • -
  • - Memory Leak -
      -
    • - Detecting and Fixing Memory Leaks -
    • -
    • - Context -
    • -
    -
  • -
  • - 3rd Party Library -
      -
    • - Image Loading -
        -
      • - Glide -
      • -
      • - Picasso -
      • -
      -
    • -
    • - Dependency Injection -
        -
      • - Dagger -
      • -
      -
    • -
    • - Networking -
        -
      • - Fast Android Networking Library -
      • -
      • - Retrofit -
      • -
      -
    • -
    • - MultiThreading -
        -
      • - RxJava -
      • -
      • - Coroutines -
      • -
      • - Kotlin Flow API -
      • -
      -
    • -
    -
  • -
  • - Coroutines - You can learn these topics here: - - Learn-Kotlin-Coroutines - -
      -
    • - coroutines -
    • -
    • - suspend -
    • -
    • - launch, async-await, withContext -
    • -
    • - dispatchers -
    • -
    • - scope, context, job -
    • -
    • - lifecycleScope, viewModelScope, GlobalScope -
    • -
    • - suspendCoroutine, suspendCancellableCoroutine -
    • -
    • - coroutineScope, supervisorScope -
    • -
    -
  • -
  • - Kotlin Flow API - You can learn these topics here: - - Learn-Kotlin-Flow - -
      -
    • - Flow Builder, Operator, Collector -
    • -
    • - flowOn, dispatchers -
    • -
    • - Operators such as filter, map, zip, flatMapConcat, retry, debounce, distinctUntilChanged, flatMapLatest -
    • -
    • - Terminal operators -
    • -
    • - StateFlow, SharedFlow, callbackFlow, channelFlow -
    • -
    -
  • -
  • - Data Format -
      -
    • - JSON -
        -
      • - GSON -
      • -
      -
    • -
    • - Flat Buffer -
    • -
    • - Protocol Buffer -
    • -
    -
  • -
  • - Android Jetpack -
      -
    • - Foundation Components -
        -
      • - AppCompat -
      • -
      • - Android KTX -
      • -
      • - Multidex -
      • -
      -
    • -
    • - Architecture Components -
        -
      • - LiveData -
      • -
      • - ViewModel -
      • -
      • - DataBinding -
      • -
      • - Paging -
      • -
      • - Work Manager -
      • -
      • - Navigation -
      • -
      -
    • -
    • - Behaviour Components -
        -
      • - Download Manager -
      • -
      • - Media Playback -
      • -
      • - Notification -
      • -
      • - Permissions -
      • -
      • - Preference -
      • -
      • - Sharing -
      • -
      • - Slice -
      • -
      -
    • -
    • - UI Component -
        -
      • - Animation & Transition -
      • -
      • - Android Auto -
      • -
      • - Emoji -
      • -
      • - Palette -
      • -
      • - Android TV -
      • -
      • - Android Wear -
      • -
      -
    • -
    -
  • -
  • - Compose -
      -
    • - State: remember, rememberSaveable, MutableState -
    • -
    • - Recomposition -
    • -
    • - State hoisting -
    • -
    • - Side-effects -
    • -
    • - Modifier -
    • -
    • - Theme -
    • -
    • - Layout, List -
    • -
    • - Gestures, Animation -
    • -
    • - CompositionLocal -
    • -
    -
  • -
  • - Common Design Patterns and Architecture -
      -
    • - Builder Pattern -
    • -
    • - Singleton -
    • -
    • - Dependency Injection -
    • -
    • - Factory -
    • -
    • - Observer -
    • -
    • - Repository -
    • -
    • - MVVM -
    • -
    • - MVP -
    • -
    • - MVI -
    • -
    • - Clean architecture -
    • -
    -
  • -
  • - Unit Testing -
      -
    • - Local Unit Testing -
    • -
    • - Instrumentation Testing -
    • -
    -
  • -
  • - Firebase -
      -
    • - FCM -
    • -
    • - Crashlytics -
    • -
    • - Analytics -
    • -
    • - Remote Config -
    • -
    • - App Indexing -
    • -
    • - Dynamic Link -
    • -
    -
  • -
  • - Security -
      -
    • - Encrypt / Decrypt -
    • -
    • - Proguard -
    • -
    • - R8 -
    • -
    -
  • -
  • - App Release -
      -
    • - .keystore file -
    • -
    • - App Bundle -
    • -
    • - Playstore -
    • -
    -
  • -
  • - Keep Learning and Improving -
  • -
-

- - - Get Mentorship: - - amitshekhar.me - - -

-

- - Found this project useful - - ❤️ - -

-
    -
  • - Support by clicking the - - ⭐ - - button on the upper right of this page. - - ✌️ - -
  • -
-

- - License -

-
-
   Copyright (C) 2022 Amit Shekhar
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-

- - Contributing to Android Developer Roadmap -

-

- Just make a pull request. You are in! -

-
-
-
-
-
-
-
- -
-
-

- - Releases - -

-
- No releases published -
-
-
-
-
-

- Sponsor this project -

- -
-
-
-
-
-
- -
- -
-
- - -
-
-

- Languages -

-
- - - - - - -
- -
-
-
-
-
-
-
-
-
-
-
-
- - - - - - -
-
-
- - + \ No newline at end of file diff --git a/a-complete-guide-to-learn-kotlin-for-android-development-b1e5d23cc2d8/index.html b/a-complete-guide-to-learn-kotlin-for-android-development-b1e5d23cc2d8/index.html new file mode 100644 index 0000000..cd1d932 --- /dev/null +++ b/a-complete-guide-to-learn-kotlin-for-android-development-b1e5d23cc2d8/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/a-complete-guide-to-learn-rxjava-b55c0cea3631/index.html b/a-complete-guide-to-learn-rxjava-b55c0cea3631/index.html new file mode 100644 index 0000000..cf9042a --- /dev/null +++ b/a-complete-guide-to-learn-rxjava-b55c0cea3631/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-activity-launchmode-explained-cbc6cf996802/index.html b/android-activity-launchmode-explained-cbc6cf996802/index.html new file mode 100644 index 0000000..f530ad9 --- /dev/null +++ b/android-activity-launchmode-explained-cbc6cf996802/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-amazing-open-source-apps-e44f520593cc/index.html b/android-amazing-open-source-apps-e44f520593cc/index.html new file mode 100644 index 0000000..5a19ef0 --- /dev/null +++ b/android-amazing-open-source-apps-e44f520593cc/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-app-optimization-using-arraymap-and-sparsearray-f2b4e2e3dc47/index.html b/android-app-optimization-using-arraymap-and-sparsearray-f2b4e2e3dc47/index.html new file mode 100644 index 0000000..5438c00 --- /dev/null +++ b/android-app-optimization-using-arraymap-and-sparsearray-f2b4e2e3dc47/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-app-performance-metrics-a1176334186e/index.html b/android-app-performance-metrics-a1176334186e/index.html new file mode 100644 index 0000000..fb185f5 --- /dev/null +++ b/android-app-performance-metrics-a1176334186e/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-app-performance-tips-smooth-running-android-app/index.html b/android-app-performance-tips-smooth-running-android-app/index.html new file mode 100644 index 0000000..e977244 --- /dev/null +++ b/android-app-performance-tips-smooth-running-android-app/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-code-style-and-guidelines-d5f80453d5c7/index.html b/android-code-style-and-guidelines-d5f80453d5c7/index.html new file mode 100644 index 0000000..aaa89b7 --- /dev/null +++ b/android-code-style-and-guidelines-d5f80453d5c7/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-developer-should-know-these-data-structures-for-next-interview/index.html b/android-developer-should-know-these-data-structures-for-next-interview/index.html new file mode 100644 index 0000000..c963a04 --- /dev/null +++ b/android-developer-should-know-these-data-structures-for-next-interview/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-development-best-practices-83c94b027fd3/index.html b/android-development-best-practices-83c94b027fd3/index.html new file mode 100644 index 0000000..2233953 --- /dev/null +++ b/android-development-best-practices-83c94b027fd3/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-development-useful-tools-fd73283e82e3/index.html b/android-development-useful-tools-fd73283e82e3/index.html new file mode 100644 index 0000000..c9bbb10 --- /dev/null +++ b/android-development-useful-tools-fd73283e82e3/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-interview-questions-7270092be277/index.html b/android-interview-questions-7270092be277/index.html new file mode 100644 index 0000000..042c8e8 --- /dev/null +++ b/android-interview-questions-7270092be277/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-memory-leaks-inputmethodmanager-solved/index.html b/android-memory-leaks-inputmethodmanager-solved/index.html new file mode 100644 index 0000000..bf8877c --- /dev/null +++ b/android-memory-leaks-inputmethodmanager-solved/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-package-name-vs-application-id-ad95b08815a6/index.html b/android-package-name-vs-application-id-ad95b08815a6/index.html new file mode 100644 index 0000000..afd104b --- /dev/null +++ b/android-package-name-vs-application-id-ad95b08815a6/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-tensorflow-machine-learning-example-ff0e9b2654cc/index.html b/android-tensorflow-machine-learning-example-ff0e9b2654cc/index.html new file mode 100644 index 0000000..4bf0586 --- /dev/null +++ b/android-tensorflow-machine-learning-example-ff0e9b2654cc/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/android-things-tutorials-getting-started-8464c11009ff/index.html b/android-things-tutorials-getting-started-8464c11009ff/index.html index 61e433a..511967a 100644 --- a/android-things-tutorials-getting-started-8464c11009ff/index.html +++ b/android-things-tutorials-getting-started-8464c11009ff/index.html @@ -1,2869 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GitHub - amitshekhariitbhu/awesome-android-things: A curated list of awesome android things tutorials, libraries and much more at one place - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - Skip to content - - - - - - - - -
-
-
-
- -
- - -
-
-
- - -
-

- amitshekhariitbhu/awesome-android-things -

-
-
-
-
- - - -
-
-
-
-
- - - - master - - - - -
-
-
- - Switch branches/tags - - -
- - -
- -
-
- - -
-
- - - - - - - -
- -
-
-
-
-
-
-
- -
-
-
-

- Name already in use -

-
-
- -
-
-
-
-
- A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? -
-
-
- - -
-
-
- -
-
- - - - -
- - Code - - - -
- -
-
-
-
-
-
-
-

- Latest commit -

-
- -
-
-
-
-
-
-

- Git stats -

- -
-
-
-

- Files -

- - - Permalink - -
- - Failed to load latest commit information. -
-
-
-
-
- Type -
-
- Name -
-
- Latest commit message -
-
- Commit time -
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
- -
-
-
- -
- -
-
-

- - - -

-

- - Awesome Android Things -

-
-

- A curated list of awesome Android Things, tutorials, libraries and much more at one place. Here you can find references about everything you do during Android Things application development. -

-
-

- - - My Personal Blog - amitshekhar.me - - - High-quality content to learn Android concepts. -

-

- - Contents -

- -

- - Useful links -

-

- - Overview posts -

- -

- - Introductions for Android developers -

- -

- - Sample apps and libraries -

- -

- - Drivers -

- -

- - TODO -

-
    -
  • - Updating it on daily basis as much as possible so that we will be always updated. -
  • -
-

- - Found this project useful - - ❤️ - -

-
    -
  • - Support by clicking the - - ⭐ - - button on the upper right of this page. - - ✌️ - -
  • -
-

- - Contact - Let's become friends -

- -

- - License -

-

- - CC0 - -

-

- To the extent possible under law, - - Amit Shekhar - - has waived all copyright and related or neighboring rights to this work. -

-

- - Contributing -

-

- Your contributions are always welcome! Just follow the following format: - - [reference name](link) - Description. - - If you like it, give a star to this project -

-
-
-
-
-
-
-
-
-
-

- About -

-

- A curated list of awesome android things tutorials, libraries and much more at one place -

-
- - - - amitshekhar.me - - -
-

- Topics -

- -

- Resources -

- - - -

- Stars -

- -

- Watchers -

- -

- Forks -

- -
-
-
-
-

- - Releases - -

-
- No releases published -
-
-
-
-
-

- - Packages - - -

-
- No packages published -
-
-
-
- -
-
-

- - Contributors - - 19 - - -

- -
    -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
  • -
    -
    -
  • -
-
- -
-
-
-
-

- Languages -

-
- - - - -
- -
-
-
-
-
-
-
-
-
-
-
-
- - - - - - -
-
-
- - + \ No newline at end of file diff --git a/awesome-android-complete-references-at-one-place/index.html b/awesome-android-complete-references-at-one-place/index.html new file mode 100644 index 0000000..0dd8f25 --- /dev/null +++ b/awesome-android-complete-references-at-one-place/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/awesome-android-open-source-libraries-56a008c776c0/index.html b/awesome-android-open-source-libraries-56a008c776c0/index.html new file mode 100644 index 0000000..477babb --- /dev/null +++ b/awesome-android-open-source-libraries-56a008c776c0/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/battery-optimization-for-android-apps-f4ef6170ff70/index.html b/battery-optimization-for-android-apps-f4ef6170ff70/index.html new file mode 100644 index 0000000..1e16f30 --- /dev/null +++ b/battery-optimization-for-android-apps-f4ef6170ff70/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/best-articles-on-android-that-we-published-in-2016-5131a23c43af/index.html b/best-articles-on-android-that-we-published-in-2016-5131a23c43af/index.html new file mode 100644 index 0000000..445aa74 --- /dev/null +++ b/best-articles-on-android-that-we-published-in-2016-5131a23c43af/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/best-articles-on-android-that-we-published-in-2017-4972a2578b77/index.html b/best-articles-on-android-that-we-published-in-2017-4972a2578b77/index.html new file mode 100644 index 0000000..a74fd66 --- /dev/null +++ b/best-articles-on-android-that-we-published-in-2017-4972a2578b77/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/comparing-android-ndk-and-renderscript-1a718c01f6fe/index.html b/comparing-android-ndk-and-renderscript-1a718c01f6fe/index.html new file mode 100644 index 0000000..bd0a546 --- /dev/null +++ b/comparing-android-ndk-and-renderscript-1a718c01f6fe/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/creating-custom-annotations-in-android-a855c5b43ed9/index.html b/creating-custom-annotations-in-android-a855c5b43ed9/index.html new file mode 100644 index 0000000..e2f27ad --- /dev/null +++ b/creating-custom-annotations-in-android-a855c5b43ed9/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/creating-custom-model-for-android-using-tensorflow-3f963d270bfb/index.html b/creating-custom-model-for-android-using-tensorflow-3f963d270bfb/index.html new file mode 100644 index 0000000..86d281f --- /dev/null +++ b/creating-custom-model-for-android-using-tensorflow-3f963d270bfb/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/creating-flow-using-flow-builder-in-kotlin/index.html b/creating-flow-using-flow-builder-in-kotlin/index.html new file mode 100644 index 0000000..af4688a --- /dev/null +++ b/creating-flow-using-flow-builder-in-kotlin/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/debugging-android-databases-and-shared-preferences-in-the-easiest-way-e5f705dfc06b/index.html b/debugging-android-databases-and-shared-preferences-in-the-easiest-way-e5f705dfc06b/index.html new file mode 100644 index 0000000..883ea25 --- /dev/null +++ b/debugging-android-databases-and-shared-preferences-in-the-easiest-way-e5f705dfc06b/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/droid-flight-initiative-to-promote-android-learning/index.html b/droid-flight-initiative-to-promote-android-learning/index.html new file mode 100644 index 0000000..0beeae6 --- /dev/null +++ b/droid-flight-initiative-to-promote-android-learning/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/every-programmer-should-read-this-book-6755dedec78d/index.html b/every-programmer-should-read-this-book-6755dedec78d/index.html new file mode 100644 index 0000000..642d37c --- /dev/null +++ b/every-programmer-should-read-this-book-6755dedec78d/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/exception-handling-in-kotlin-flow/index.html b/exception-handling-in-kotlin-flow/index.html new file mode 100644 index 0000000..ca58aca --- /dev/null +++ b/exception-handling-in-kotlin-flow/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/from-civil-engineer-to-software-developer/index.html b/from-civil-engineer-to-software-developer/index.html new file mode 100644 index 0000000..b0a492b --- /dev/null +++ b/from-civil-engineer-to-software-developer/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/good-code-vs-bad-code-263f71e867c1/index.html b/good-code-vs-bad-code-263f71e867c1/index.html new file mode 100644 index 0000000..14d611c --- /dev/null +++ b/good-code-vs-bad-code-263f71e867c1/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/google-android-developer-interview/index.html b/google-android-developer-interview/index.html new file mode 100644 index 0000000..9ae7f31 --- /dev/null +++ b/google-android-developer-interview/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/google-released-the-developer-preview-of-android-things-iot-75cb49b9ce24/index.html b/google-released-the-developer-preview-of-android-things-iot-75cb49b9ce24/index.html index abddfa8..b21a6cc 100644 --- a/google-released-the-developer-preview-of-android-things-iot-75cb49b9ce24/index.html +++ b/google-released-the-developer-preview-of-android-things-iot-75cb49b9ce24/index.html @@ -1,216 +1 @@ - - - - - Not Found - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 404 -
-
- Oops! page not found -
-
- - Back - -
-
-
-
- -
-
-
- - - \ No newline at end of file + \ No newline at end of file diff --git a/how-the-android-image-loading-library-glide-and-fresco-works-962bc9d1cc40/index.html b/how-the-android-image-loading-library-glide-and-fresco-works-962bc9d1cc40/index.html new file mode 100644 index 0000000..b28a2f8 --- /dev/null +++ b/how-the-android-image-loading-library-glide-and-fresco-works-962bc9d1cc40/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/how-to-become-a-complete-android-developer-110d7ef91f2a/index.html b/how-to-become-a-complete-android-developer-110d7ef91f2a/index.html new file mode 100644 index 0000000..4e49a89 --- /dev/null +++ b/how-to-become-a-complete-android-developer-110d7ef91f2a/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/how-to-download-a-file-in-android-and-show-the-progress-very-easily/index.html b/how-to-download-a-file-in-android-and-show-the-progress-very-easily/index.html new file mode 100644 index 0000000..1f5ea6d --- /dev/null +++ b/how-to-download-a-file-in-android-and-show-the-progress-very-easily/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/how-to-learn-android-development-f33dd6dba40d/index.html b/how-to-learn-android-development-f33dd6dba40d/index.html new file mode 100644 index 0000000..3100371 --- /dev/null +++ b/how-to-learn-android-development-f33dd6dba40d/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/how-to-use-bitmap-pool-in-android-56c71a55533c/index.html b/how-to-use-bitmap-pool-in-android-56c71a55533c/index.html new file mode 100644 index 0000000..dd071c4 --- /dev/null +++ b/how-to-use-bitmap-pool-in-android-56c71a55533c/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/i-have-1-year-of-experience-in-android-now-what-52d955b08027/index.html b/i-have-1-year-of-experience-in-android-now-what-52d955b08027/index.html new file mode 100644 index 0000000..12266bd --- /dev/null +++ b/i-have-1-year-of-experience-in-android-now-what-52d955b08027/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/implement-caching-in-android-using-rxjava-operators/index.html b/implement-caching-in-android-using-rxjava-operators/index.html new file mode 100644 index 0000000..ef50248 --- /dev/null +++ b/implement-caching-in-android-using-rxjava-operators/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/implement-search-using-rxjava-operators-c8882b64fe1d/index.html b/implement-search-using-rxjava-operators-c8882b64fe1d/index.html new file mode 100644 index 0000000..008038a --- /dev/null +++ b/implement-search-using-rxjava-operators-c8882b64fe1d/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8/index.html b/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8/index.html new file mode 100644 index 0000000..30cdc1b --- /dev/null +++ b/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/improve-your-android-coding-through-annotations-26b3273c137a/index.html b/improve-your-android-coding-through-annotations-26b3273c137a/index.html new file mode 100644 index 0000000..2f6dee4 --- /dev/null +++ b/improve-your-android-coding-through-annotations-26b3273c137a/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/instant-search-using-kotlin-flow-operators/index.html b/instant-search-using-kotlin-flow-operators/index.html new file mode 100644 index 0000000..802dcbd --- /dev/null +++ b/instant-search-using-kotlin-flow-operators/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jetpack-datastore-preferences/index.html b/jetpack-datastore-preferences/index.html index 2ad2bc5..c241fd4 100644 --- a/jetpack-datastore-preferences/index.html +++ b/jetpack-datastore-preferences/index.html @@ -1,674 +1 @@ - - - - - - - Jetpack DataStore Preferences - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
- -
- -
-
- -
- -
-
-
-
-
-
-
- -
-
-
-
-
-

- Jetpack DataStore Preferences -

-
-
-
-
-
-
- Authors -
-
-
    -
  • - - - - - Amit Shekhar - - -
    -
    - Name -
    -
    - Amit Shekhar -
    -
    - Published on -
    -
    - -
    -
    -
  • -
-
-
-
-
- - - - - Jetpack DataStore Preferences - - -

- I am - - - Amit Shekhar - - - , a mentor helping developers in getting high-paying tech jobs. -

-

- In this blog, we are going to see why we need Jetpack DataStore Preferences, learn how to implement Jetpack DataStore Preferences in our Android application and how can we migrate our SharedPreferences to DataStore Preferences. -

-

- I will be sharing what I learned from the Android Official documentation and why I am recommending the new Jetpack DataStore from my practical experience. -

-

- Topics to be covered in the blog: -

-
    -
  • - Why Jetpack DataStore? -
  • -
  • - SharedPreferences vs DataStore Preferences -
  • -
  • - Implementing Jetpack DataStore Preferences -
  • -
  • - Migration from SharedPreferences to DataStore Preferences -
  • -
-

- First things first, why this new Jetpack DataStore? -

-

- - Why Jetpack DataStore? -

-

- As per the official documentation: -

-
    -
  • - Jetpack DataStore is a new and improved data storage solution aimed at replacing SharedPreferences. -
  • -
  • - It is built on - - Kotlin Coroutines - - and - - Flow - - . -
  • -
  • - Data is stored asynchronously, consistently, and transactionally, overcoming most of the drawbacks of SharedPreferences. -
  • -
-

- The above-mentioned improvements are great. -

-

- I will tell you a reason, why I am recommending the new Jetpack DataStore from my practical experience. -

-

- I was working on an Android application having more than 200 million downloads, the app is on Google Play Store for more than 7 years. In this long time period, the app went through huge development, many releases, and many bug fixes. -

-

- So, at some point, the app started getting ANR(Application Not Responding). -

-

- - The reason for ANR: - - The app is doing a long-running task on the UI Thread. (more than 5 seconds). -

-

- Why this ANR was coming? -

-

- The major reason was that our shared preferences file had become too big as we kept adding new key-value one after one. We were trying to access the value for a particular key as soon as the app opens on the UI Thread. But the thing is that when you access the SharedPreferences for the first time, it reads the whole file, brings the data in memory. And for us, this was happening on UI Thread. -

-

- This is an I/O operation. It can take time. For the bigger file in our case, it was leading to ANR. -

-

- We built our own solution for that. This is out of the scope of this blog. I might plan a detailed blog on that solution. -

-

- - And the current implementation of Jetpack DataStore does not encourage the reading of the data on UI Thread. This is something I really liked about it. - -

-

- Now, let's talk about SharedPreferences vs DataStore Preferences. -

-

- - SharedPreferences vs DataStore Preferences -

-

- The following are the difference between SharedPreferences and DataStore Preferences: -

-
    -
  • - Both provide the Async API. -
  • -
  • - SharedPreferences provide a simple Synchronous API but - - not - - safe to call on UI thread. DataStore Preferences do not encourage this. -
  • -
  • - Consistency is guaranteed in DataStore Preferences. -
  • -
  • - Error handling is supported in DataStore Preferences. -
  • -
  • - DataStore Preferences support Kotlin Coroutines Flow API by default. -
  • -
-

- This is how the DataStore Preferences is an improved solution over the SharedPreferences. -

-

- Now, let's move to the implementation part. -

-

- - Implementing Jetpack DataStore Preferences -

-

- Add the following dependency in your app level build.gradle. -

-
-
implementation "androidx.datastore:datastore-preferences:1.0.0-alpha01"
-
-
-

- - Note: Make sure to use the latest version for the most stable release. - -

-

- Now, similar to the SharedPreferences object, we need to create the object of DataStore Preferences. -

-
-
val dataStore: DataStore<Preferences> = context.createDataStore(name = "example-data-store-prefs")
-
-
-

- Then, we create two - - extension functions - - to use them to read and write data. This is just for convenience. -

-
-
fun <T> DataStore<Preferences>.getValueFlow(
-    key: Preferences.Key<T>,
-    defaultValue: T
-): Flow<T> {
-    return this.data
-        .catch { exception ->
-            if (exception is IOException) {
-                emit(emptyPreferences())
-            } else {
-                throw exception
-            }
-        }.map { preferences ->
-            preferences[key] ?: defaultValue
-        }
-}
-
-suspend fun <T> DataStore<Preferences>.setValue(key: Preferences.Key<T>, value: T) {
-    this.edit { preferences ->
-        preferences[key] = value
-    }
-}
-
-
-

- Then, we create Preferences Keys like below: -

-
-
companion object {
-    private val USERNAME = preferencesKey<String>("username")
-}
-
-
-

- Now, writing the value to the DataStore Preferences: -

-
-
viewModelScope.launch {
-    dataStore.setValue(USERNAME, "Amit Shekhar")
-}
-
-
-

- Now, reading the data from the DataStore Preferences: -

-
-
viewModelScope.launch {
-    dataStore.getValueFlow(USERNAME, "")
-        .collect { value ->
-            // use the value
-        }
-}
-
-
-

- Here, we can handle the error by using the - - catch - - operator on the flow. -

-
-
viewModelScope.launch {
-    dataStore.getValueFlow(USERNAME, "")
-        .catch {
-            // handle error
-        }
-        .collect { value ->
-            // use the value
-        }
-}
-
-
-

- This is how we can easily use it in our Android Application. -

-

- Now, let's talk about the migration from SharedPreferences to DataStore Preferences. -

-

- - Migration from SharedPreferences to DataStore Preferences -

-

- When it comes to migration, DataStore handles it for us. We just have to provide the names of the SharedPreferences. For example, if " - - example-prefs - - " is the name of SharedPreferences, we will have to do like below: -

-
-
val dataStore: DataStore<Preferences> =
-    context.createDataStore(
-        name = "example-data-store-prefs",
-        migrations = listOf(SharedPreferencesMigration(context, "example-prefs"))
-    )
-
-
-

- When we check the - - SharedPreferencesMigration - - function: -

-
-
fun SharedPreferencesMigration(
-    context: Context,
-    sharedPreferencesName: String,
-    keysToMigrate: Set<String>? = MIGRATE_ALL_KEYS,
-    deleteEmptyPreferences: Boolean = true
-)
-
-
-

- We can see that there are more options available, we can use them based on our use-cases. -

-

- This way migrating from SharedPreferences to DataStore Preferences is very easy. -

-

- I will update this blog when I find and learn more about this topic. -

-

- - Show your love by sharing this blog with your fellow developers. - -

-

- Master Kotlin Coroutines from here: - - Mastering Kotlin Coroutines - -

-

- That's it for now. -

-

- Thanks -

-

- - - Amit Shekhar - - -

-

- You can connect with me on: -

- -

- - - Read all of my high-quality blogs here. - - -

-
-
-
-
-

- Tags -

- -
-
-
-
-
-
-
- -
-
- - - \ No newline at end of file + \ No newline at end of file diff --git a/kotlin-flow-retry-operator-with-exponential-backoff-delay/index.html b/kotlin-flow-retry-operator-with-exponential-backoff-delay/index.html new file mode 100644 index 0000000..0a7072f --- /dev/null +++ b/kotlin-flow-retry-operator-with-exponential-backoff-delay/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kotlin-flow-zip-operator-parallel-multiple-network-calls/index.html b/kotlin-flow-zip-operator-parallel-multiple-network-calls/index.html new file mode 100644 index 0000000..6a54614 --- /dev/null +++ b/kotlin-flow-zip-operator-parallel-multiple-network-calls/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kotlin-withcontext-vs-async-await/index.html b/kotlin-withcontext-vs-async-await/index.html new file mode 100644 index 0000000..6f9420f --- /dev/null +++ b/kotlin-withcontext-vs-async-await/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/learn-kotlin-lateinit-vs-lazy/index.html b/learn-kotlin-lateinit-vs-lazy/index.html new file mode 100644 index 0000000..81cb0ff --- /dev/null +++ b/learn-kotlin-lateinit-vs-lazy/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/mastering-kotlin-coroutines-in-android-step-by-step-guide/index.html b/mastering-kotlin-coroutines-in-android-step-by-step-guide/index.html new file mode 100644 index 0000000..d0cd3c4 --- /dev/null +++ b/mastering-kotlin-coroutines-in-android-step-by-step-guide/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/migrating-from-rxjava1-to-rxjava2-5dac0a94b4aa/index.html b/migrating-from-rxjava1-to-rxjava2-5dac0a94b4aa/index.html new file mode 100644 index 0000000..1c75244 --- /dev/null +++ b/migrating-from-rxjava1-to-rxjava2-5dac0a94b4aa/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/mvvm-architecture-android-tutorial-for-beginners-step-by-step-guide/index.html b/mvvm-architecture-android-tutorial-for-beginners-step-by-step-guide/index.html new file mode 100644 index 0000000..a742b40 --- /dev/null +++ b/mvvm-architecture-android-tutorial-for-beginners-step-by-step-guide/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/my-first-blog/index.html b/my-first-blog/index.html new file mode 100644 index 0000000..1d7af4a --- /dev/null +++ b/my-first-blog/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/need-for-the-app-startup-library/index.html b/need-for-the-app-startup-library/index.html new file mode 100644 index 0000000..4aa06a3 --- /dev/null +++ b/need-for-the-app-startup-library/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/okhttp-interceptor-making-the-most-of-it/index.html b/okhttp-interceptor-making-the-most-of-it/index.html new file mode 100644 index 0000000..25a31d4 --- /dev/null +++ b/okhttp-interceptor-making-the-most-of-it/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/parallel-multiple-network-calls-using-kotlin-coroutines/index.html b/parallel-multiple-network-calls-using-kotlin-coroutines/index.html new file mode 100644 index 0000000..fb6ed65 --- /dev/null +++ b/parallel-multiple-network-calls-using-kotlin-coroutines/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/prdownloader-a-file-downloader-library-for-android-b9c5fc56a640/index.html b/prdownloader-a-file-downloader-library-for-android-b9c5fc56a640/index.html new file mode 100644 index 0000000..c13650a --- /dev/null +++ b/prdownloader-a-file-downloader-library-for-android-b9c5fc56a640/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/recyclerview-optimization/index.html b/recyclerview-optimization/index.html new file mode 100644 index 0000000..faeef2c --- /dev/null +++ b/recyclerview-optimization/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/room-database-with-kotlin-coroutines-in-android/index.html b/room-database-with-kotlin-coroutines-in-android/index.html new file mode 100644 index 0000000..5c98865 --- /dev/null +++ b/room-database-with-kotlin-coroutines-in-android/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rxjava-fast-android-networking-6e3d90ee4387/index.html b/rxjava-fast-android-networking-6e3d90ee4387/index.html new file mode 100644 index 0000000..228c3e1 --- /dev/null +++ b/rxjava-fast-android-networking-6e3d90ee4387/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rxjava-operator-concat-vs-merge/index.html b/rxjava-operator-concat-vs-merge/index.html new file mode 100644 index 0000000..2754d9d --- /dev/null +++ b/rxjava-operator-concat-vs-merge/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rxjava-operators-tutorial-learn-by-examples/index.html b/rxjava-operators-tutorial-learn-by-examples/index.html index a4228b6..fc20563 100644 --- a/rxjava-operators-tutorial-learn-by-examples/index.html +++ b/rxjava-operators-tutorial-learn-by-examples/index.html @@ -1,655 +1 @@ - - - - - - - RxJava Tutorial - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
- -
- -
-
- -
- -
-
-
-
-
-
-
- -
-
-
-
-
-

- RxJava Tutorial -

-
-
-
-
-
-
- Authors -
-
-
    -
  • - - - - - Amit Shekhar - - -
    -
    - Name -
    -
    - Amit Shekhar -
    -
    - Published on -
    -
    - -
    -
    -
  • -
-
-
-
-
- - - - - RxJava Tutorial - - -

- I am - - - Amit Shekhar - - - , a mentor helping developers in getting high-paying tech jobs. -

-

- This blog is about the complete resources to learn RxJava in one place. These RxJava tutorials will help you in learning RxJava properly. -

-

- RxJava is used for reactive programming. In reactive programming, the consumer reacts to the data as it comes in. Reactive programming allows for event changes to propagate to registered observers. -

-

- As we know that RxJava is the most important library for Android Projects. So we must have a proper grip on using RxJava in the Android Projects. -

-

- I believe that: -

-
-

- RxJava is an art and endless possibilities await those who can master it. -

-
-

- Let’s see all the tutorials available to learn RxJava in the best possible way. -

-

- - Types Of Observables In RxJava -

-

- In this tutorial, we will learn about the different types Of Observables in RxJava. Learning about all these types is important to use them effectively. -

-

- Link to the tutorial: - - Types Of Observables In RxJava - -

-

- - RxJava Create and fromCallable Operator -

-

- In this tutorial, we are going to learn about the RxJava Create and fromCallable Operators. We will understand when to use the Create operator and when to use the fromCallable operator depending on our use case. Most of the time, we do mistakes while using RxJava Operators. Let's understand it clearly to avoid the mistake. -

-

- Link to the tutorial: - - RxJava Create and fromCallable Operator - -

-

- - RxJava Concat Operator -

-

- In this tutorial, we will learn about the Concat operator of RxJava. -

-

- Link to the tutorial: - - RxJava Concat Operator - -

-

- - RxJava Merge Operator -

-

- In this tutorial, we will learn about the Merge operator of RxJava. -

-

- Link to the tutorial: - - RxJava Merge Operator - -

-

- - RxJava Zip Operator -

-

- In this tutorial, we will learn the RxJava Zip Operator with an example. Most of the time while Android App Development, we get the use-case of doing some operations in parallel and return the return when all are completed. The Zip Operator is very handy here. -

-

- Link to the tutorial: - - RxJava Zip Operator - -

-

- - RxJava Operator Map vs FlatMap -

-

- In this tutorial, we will learn about the Map vs FlatMap Operator in RxJava. -

-

- Link to the tutorial: - - RxJava Operator Map vs FlatMap - -

-

- - RxJava Interval Operator -

-

- In this tutorial, we will learn about the Interval Operator of RxJava. -

-

- RxJava has operators for every use case. One of the very useful operators of RxJava is Interval Operator. -

-

- Link to the tutorial: - - RxJava Interval Operator - -

-

- - RxJava Defer Operator -

-

- In this tutorial, we will learn about the Defer operator of RxJava. We will understand when to use the Defer operator depending on our use case. Most of the time, we do mistakes while using the RxJava Defer Operator. Let's understand it clearly to avoid the mistake. -

-

- Link to the tutorial: - - RxJava Defer Operator - -

-

- - RxJava Subject -

-

- In this tutorial, we will learn about the RxJava Subject - Publish, Replay, Behavior, and Async. -

-

- Link to the tutorial: - - RxJava Subject - Publish, Replay, Behavior, and Async - -

-

- - Instant Search Using RxJava Operators -

-

- In this tutorial, we will learn how to implement the instant search feature using RxJava operators in Android applications. -

-

- Implementing the search is a common use-case in Android Apps Development. We can implement it very easily using RxJava Operators. -

-

- Here, we have covered the operators such as filter, debounce, distinctUntilChanged, switchMap. -

-

- Link to the tutorial: - - Instant Search Using RxJava Operators - -

-

- - Pagination In RecyclerView Using RxJava Operators -

-

- In this tutorial, we will learn how to implement pagination in RecyclerView using RxJava operators. -

-

- Link to the tutorial: - - Pagination In RecyclerView Using RxJava Operators - -

-

- - dispose vs clear CompositeDisposable RxJava -

-

- In this blog, we will learn about the dispose method and the clear method of CompositeDisposable that is present in the RxJava. -

-

- Link to the tutorial: - - dispose vs clear CompositeDisposable RxJava - -

-

- - RxJava Operators By Examples -

-

- While working on Android Project, I have implemented many things using RxJava Operators very easily which would have been very difficult without the use of RxJava Operators. I must say RxJava operators have always been a good friend of mine. -

-

- I believe the best way to learn the RxJava Operators is to learn them by examples. I have created many tutorials for learning RxJava. Here, I have gathered some great examples to learn from them. -

-

- Link to the project to learn: - - RxJava2-Android-Samples - -

-

- Here, you will learn about all the operators of RxJava by examples and real use-cases in Android Development. -

-
    -
  • - Map: transform the items emitted by an Observable by applying a function to each item -
  • -
  • - Zip: combine the emissions of multiple Observables together via a specified function and emit single items for each combination based on the results of this function -
  • -
  • - Filter: emit only those items from an Observable that pass a predicate test -
  • -
  • - FlatMap: transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable -
  • -
  • - Take: emit only the first n items emitted by an Observable -
  • -
  • - Reduce: apply a function to each item emitted by an Observable, sequentially, and emit the final value -
  • -
  • - Skip: suppress the first n items emitted by an Observable -
  • -
  • - Buffer: periodically gather items emitted by an Observable into bundles and emit these bundles rather than emitting the items one at a time -
  • -
  • - Concat: emit the emissions from two or more Observables without interleaving them -
  • -
  • - Replay: ensure that all observers see the same sequence of emitted items, even if they subscribe after the Observable has begun emitting items -
  • -
  • - Merge: combine multiple Observables into one by merging their emissions -
  • -
  • - SwitchMap: transform the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable -
  • -
-

- That's it for now. -

-

- Thanks -

-

- - - Amit Shekhar - - -

-

- You can connect with me on: -

- -

- - - Read all of my high-quality blogs here. - - -

-
-
-
-
-

- Tags -

- -
-
-
-
-
-
-
- -
-
- - - \ No newline at end of file + \ No newline at end of file diff --git a/simple-and-fast-android-networking-19ed860d1455/index.html b/simple-and-fast-android-networking-19ed860d1455/index.html new file mode 100644 index 0000000..f0b4f00 --- /dev/null +++ b/simple-and-fast-android-networking-19ed860d1455/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/suspend-function-in-kotlin-coroutines/index.html b/suspend-function-in-kotlin-coroutines/index.html new file mode 100644 index 0000000..876d255 --- /dev/null +++ b/suspend-function-in-kotlin-coroutines/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/terminal-operators-in-kotlin-flow/index.html b/terminal-operators-in-kotlin-flow/index.html new file mode 100644 index 0000000..dc0cee9 --- /dev/null +++ b/terminal-operators-in-kotlin-flow/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thank-you-note-from-your-mindorks-community-e2f94e7055aa/index.html b/thank-you-note-from-your-mindorks-community-e2f94e7055aa/index.html new file mode 100644 index 0000000..902f0b8 --- /dev/null +++ b/thank-you-note-from-your-mindorks-community-e2f94e7055aa/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/the-new-dagger-2-android-injector-cbe7d55afa6a/index.html b/the-new-dagger-2-android-injector-cbe7d55afa6a/index.html new file mode 100644 index 0000000..3c28305 --- /dev/null +++ b/the-new-dagger-2-android-injector-cbe7d55afa6a/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/threadpoolexecutor-in-android-8e9d22330ee3/index.html b/threadpoolexecutor-in-android-8e9d22330ee3/index.html new file mode 100644 index 0000000..a541bc5 --- /dev/null +++ b/threadpoolexecutor-in-android-8e9d22330ee3/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-context-in-android-application-330913e32514/index.html b/understanding-context-in-android-application-330913e32514/index.html new file mode 100644 index 0000000..903d25a --- /dev/null +++ b/understanding-context-in-android-application-330913e32514/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-higher-order-functions-and-lambdas-in-kotlin/index.html b/understanding-higher-order-functions-and-lambdas-in-kotlin/index.html new file mode 100644 index 0000000..26a19e8 --- /dev/null +++ b/understanding-higher-order-functions-and-lambdas-in-kotlin/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-inline-noinline-and-crossinline-in-kotlin/index.html b/understanding-inline-noinline-and-crossinline-in-kotlin/index.html new file mode 100644 index 0000000..20a0311 --- /dev/null +++ b/understanding-inline-noinline-and-crossinline-in-kotlin/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-rxjava-create-and-fromcallable-operator/index.html b/understanding-rxjava-create-and-fromcallable-operator/index.html new file mode 100644 index 0000000..82174fd --- /dev/null +++ b/understanding-rxjava-create-and-fromcallable-operator/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-rxjava-defer-operator/index.html b/understanding-rxjava-defer-operator/index.html new file mode 100644 index 0000000..4f77d40 --- /dev/null +++ b/understanding-rxjava-defer-operator/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f/index.html b/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f/index.html index f9c672e..f88a74e 100644 --- a/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f/index.html +++ b/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f/index.html @@ -1,604 +1 @@ - - - - - - - RxJava Subject - Publish, Replay, Behavior, and Async - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
- -
- -
-
- -
- -
-
-
-
-
-
-
- -
-
-
-
-
-

- RxJava Subject - Publish, Replay, Behavior, and Async -

-
-
-
-
-
-
- Authors -
-
-
    -
  • - - - - - Amit Shekhar - - -
    -
    - Name -
    -
    - Amit Shekhar -
    -
    - Published on -
    -
    - -
    -
    -
  • -
-
-
-
-
- - - - - RxJava Subject - Publish, Replay, Behavior, and Async - - -

- I am - - - Amit Shekhar - - - , a mentor helping developers in getting high-paying tech jobs. -

-

- In this blog, we will learn about the RxJava Subject - Publish, Replay, Behavior, and Async. -

-

- This article is all about the Subject available in RxJava. -

-
    -
  • - Publish Subject -
  • -
  • - Replay Subject -
  • -
  • - Behavior Subject -
  • -
  • - Async Subject -
  • -
-

- As we already have the sample project based on RxJava2 to learn RxJava (many developers have learned from this sample project), So I have included the Subject examples in the same project. Fork, clone, build, run, and learn RxJava. -

-

- Project Link: - - RxJava2-Android-Samples - -

-

- - What is Subject? -

-

- From the official documentation: -

-
-

- A Subject is a sort of bridge or proxy that is available in some implementations of ReactiveX that acts both as an observer and as an Observable. Because it is an observer, it can subscribe to one or more Observables, and because it is an Observable, it can pass through the items it observes by re-emitting them, and it can also emit new items. -

-
-

- I believe: - - learning by examples is the best way to learn - - . -

-

- Let's learn it through the Professor-Student analogy. -

-

- - Observable - - : Assume that a - - professor - - is an observable. The professor teaches a topic to the students. -

-

- - Observer - - : Assume that a - - student - - is an observer. The student observes the topic that is being taught by the professor. -

-

- - Publish Subject -

-

- It emits all the subsequent items of the source Observable at the time of subscription. -

-

- Here, if a student entered late into the classroom, he just wants to listen from that point of time when he entered the classroom. So, - - Publish - - will be the best for this use case. -

-

- See the below example: -

-
-
PublishSubject<Integer> source = PublishSubject.create();
-
-// It will get 1, 2, 3, 4 and onComplete
-source.subscribe(getFirstObserver());
-
-source.onNext(1);
-source.onNext(2);
-source.onNext(3);
-
-// It will get 4 and onComplete for second observer also.
-source.subscribe(getSecondObserver());
-
-source.onNext(4);
-source.onComplete();
-
-
-

- - Replay Subject -

-

- It emits all the items of the source Observable, regardless of when the subscriber subscribes. -

-

- Here, if a student entered late into the classroom, he wants to listen from the beginning. So, here we will use - - Replay - - to achieve this. -

-

- See the below example: -

-
-
ReplaySubject<Integer> source = ReplaySubject.create();
-
-// It will get 1, 2, 3, 4
-source.subscribe(getFirstObserver());
-
-source.onNext(1);
-source.onNext(2);
-source.onNext(3);
-source.onNext(4);
-source.onComplete();
-
-// It will also get 1, 2, 3, 4 as we have used replay Subject
-source.subscribe(getSecondObserver());
-
-
-

- - Behavior Subject -

-

- It emits the most recently emitted item and all the subsequent items of the source Observable when an observer subscribes to it. -

-

- Here, if a student entered late into the classroom, he wants to listen to the most recent things(not from the beginning) being taught by the professor so that he gets the idea of the context. So, here we will use - - Behavior - - . -

-

- See the below example: -

-
-
BehaviorSubject<Integer> source = BehaviorSubject.create();
-
-// It will get 1, 2, 3, 4 and onComplete
-source.subscribe(getFirstObserver());
-
-source.onNext(1);
-source.onNext(2);
-source.onNext(3);
-
-// It will get 3(last emitted)and 4(subsequent item) and onComplete
-source.subscribe(getSecondObserver());
-
-source.onNext(4);
-source.onComplete();
-
-
-

- - Async Subject -

-

- It only emits the last value of the source Observable(and only the last value) only after that source Observable completes. -

-

- Here, if a student entered the classroom at any point in time, and wants to listen only to the last thing(and only the last thing) being taught after class is over. So, here we will use - - Async - - . -

-

- See the below example: -

-
-
AsyncSubject<Integer> source = AsyncSubject.create();
-
-// It will get only 4 and onComplete
-source.subscribe(getFirstObserver());
-
-source.onNext(1);
-source.onNext(2);
-source.onNext(3);
-
-// It will also get only get 4 and onComplete
-source.subscribe(getSecondObserver());
-
-source.onNext(4);
-source.onComplete();
-
-
-

- So, whenever you are stuck with these types of cases, the RxJava Subject will be your best friend. -

-

- Master Kotlin Coroutines from here: - - Mastering Kotlin Coroutines - -

-

- That's it for now. -

-

- Thanks -

-

- - - Amit Shekhar - - -

-

- You can connect with me on: -

- -

- - - Read all of my high-quality blogs here. - - -

-
-
-
-
-

- Tags -

- -
-
-
-
-
-
-
- -
-
- - - \ No newline at end of file + \ No newline at end of file diff --git a/understanding-rxjava-timer-delay-and-interval-operators/index.html b/understanding-rxjava-timer-delay-and-interval-operators/index.html new file mode 100644 index 0000000..b42d8ec --- /dev/null +++ b/understanding-rxjava-timer-delay-and-interval-operators/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-rxjava-zip-operator-with-example/index.html b/understanding-rxjava-zip-operator-with-example/index.html new file mode 100644 index 0000000..f82b698 --- /dev/null +++ b/understanding-rxjava-zip-operator-with-example/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/understanding-types-of-observables-in-rxjava-6c3a2d0819c8/index.html b/understanding-types-of-observables-in-rxjava-6c3a2d0819c8/index.html new file mode 100644 index 0000000..88bc2fa --- /dev/null +++ b/understanding-types-of-observables-in-rxjava-6c3a2d0819c8/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unit-testing-viewmodel-with-kotlin-coroutines-and-livedata/index.html b/unit-testing-viewmodel-with-kotlin-coroutines-and-livedata/index.html new file mode 100644 index 0000000..9f1db80 --- /dev/null +++ b/unit-testing-viewmodel-with-kotlin-coroutines-and-livedata/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/use-strictmode-to-find-things-you-did-by-accident-in-android-development-4cf0e7c8d997/index.html b/use-strictmode-to-find-things-you-did-by-accident-in-android-development-4cf0e7c8d997/index.html new file mode 100644 index 0000000..0952722 --- /dev/null +++ b/use-strictmode-to-find-things-you-did-by-accident-in-android-development-4cf0e7c8d997/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/using-constraint-layout-in-android-531e68019cd/index.html b/using-constraint-layout-in-android-531e68019cd/index.html new file mode 100644 index 0000000..18606bd --- /dev/null +++ b/using-constraint-layout-in-android-531e68019cd/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/using-snaphelper-in-recyclerview-fc616b6833e8/index.html b/using-snaphelper-in-recyclerview-fc616b6833e8/index.html new file mode 100644 index 0000000..c2742ab --- /dev/null +++ b/using-snaphelper-in-recyclerview-fc616b6833e8/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/what-are-coroutines-in-kotlin-bf4fecd476e9/index.html b/what-are-coroutines-in-kotlin-bf4fecd476e9/index.html new file mode 100644 index 0000000..511bca7 --- /dev/null +++ b/what-are-coroutines-in-kotlin-bf4fecd476e9/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/why-consider-flatbuffer-over-json-2e4aa8d4ed07/index.html b/why-consider-flatbuffer-over-json-2e4aa8d4ed07/index.html new file mode 100644 index 0000000..e474e66 --- /dev/null +++ b/why-consider-flatbuffer-over-json-2e4aa8d4ed07/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/why-every-developer-should-write-blog-b2597116ffed/index.html b/why-every-developer-should-write-blog-b2597116ffed/index.html new file mode 100644 index 0000000..55a0151 --- /dev/null +++ b/why-every-developer-should-write-blog-b2597116ffed/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/why-use-facebooks-android-device-year-class-library-e5f38a14a3b9/index.html b/why-use-facebooks-android-device-year-class-library-e5f38a14a3b9/index.html new file mode 100644 index 0000000..d09223c --- /dev/null +++ b/why-use-facebooks-android-device-year-class-library-e5f38a14a3b9/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/why-you-must-try-kotlin-for-android-development-e14d00c8084b/index.html b/why-you-must-try-kotlin-for-android-development-e14d00c8084b/index.html new file mode 100644 index 0000000..510cabf --- /dev/null +++ b/why-you-must-try-kotlin-for-android-development-e14d00c8084b/index.html @@ -0,0 +1 @@ + \ No newline at end of file