├── .idea ├── .gitignore ├── vcs.xml ├── misc.xml ├── modules.xml ├── android-learning-resources.iml ├── $CACHE_FILE$ └── codeStyles │ └── Project.xml ├── images └── learning.jpg ├── .gitignore ├── LICENSE └── README.md /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /images/learning.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niharika2810/android-learning-resources/HEAD/images/learning.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .DS_Store 3 | .jekyll 4 | .jekyll-metadata 5 | .bundle 6 | .sass-cache 7 | Gemfile 8 | Gemfile.lock 9 | node_modules 10 | package.json 11 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/android-learning-resources.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/$CACHE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Android 10 | 11 | 12 | Chrome OSCorrectnessLintAndroid 13 | 14 | 15 | Code style issuesJava 16 | 17 | 18 | CorrectnessLintAndroid 19 | 20 | 21 | Declaration redundancyJava 22 | 23 | 24 | Java 25 | 26 | 27 | LintAndroid 28 | 29 | 30 | Probable bugsJava 31 | 32 | 33 | 34 | 35 | OptionalAssignedToNull 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | xmlns:android 14 | 15 | ^$ 16 | 17 | 18 | 19 |
20 |
21 | 22 | 23 | 24 | xmlns:.* 25 | 26 | ^$ 27 | 28 | 29 | BY_NAME 30 | 31 |
32 |
33 | 34 | 35 | 36 | .*:id 37 | 38 | http://schemas.android.com/apk/res/android 39 | 40 | 41 | 42 |
43 |
44 | 45 | 46 | 47 | .*:name 48 | 49 | http://schemas.android.com/apk/res/android 50 | 51 | 52 | 53 |
54 |
55 | 56 | 57 | 58 | name 59 | 60 | ^$ 61 | 62 | 63 | 64 |
65 |
66 | 67 | 68 | 69 | style 70 | 71 | ^$ 72 | 73 | 74 | 75 |
76 |
77 | 78 | 79 | 80 | .* 81 | 82 | ^$ 83 | 84 | 85 | BY_NAME 86 | 87 |
88 |
89 | 90 | 91 | 92 | .* 93 | 94 | http://schemas.android.com/apk/res/android 95 | 96 | 97 | ANDROID_ATTRIBUTE_ORDER 98 | 99 |
100 |
101 | 102 | 103 | 104 | .* 105 | 106 | .* 107 | 108 | 109 | BY_NAME 110 | 111 |
112 |
113 |
114 |
115 |
116 |
-------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Android Learning Resources 2 | 3 | ## Pick up the best and save it for future reference. 4 | 5 | 6 | ![learning](images/learning.jpg) 7 | 8 | 9 | We struggle a lot learning small, basic and specific concepts. Here is my list of resources which may help you understand **Android** in a better way. 10 | A repository containing link/resources to small, basic as well as specific Android concepts. 11 | 12 | 13 | ## Java 14 | 15 | * Is Java pass by reference or value? 16 | 17 | [Link 1](https://www.infoworld.com/article/3512039/does-java-pass-by-reference-or-pass-by-value.html#:~:text=Java%20always%20passes%20parameter%20variables,is%20passed%20to%20a%20method.&text=%E2%80%9CPassing%20by%20reference%E2%80%9D%20refers%20to,of%20the%20variable%20in%20memory.) 18 | 19 | [Link 2](https://www.journaldev.com/3884/java-is-pass-by-value-and-not-pass-by-reference) 20 | 21 | * [Desugaring in Java](https://blog.mindorks.com/desugaring-in-android) 22 | 23 | * [Understanding Overloading and Overriding in Java](https://java2blog.com/method-overloading-and-overriding-interview-questions-in-java/) 24 | 25 | * [Practive Overloading and Overriding Java](https://javaconceptoftheday.com/java-practice-questions-on-method-overloading-and-overriding/) 26 | 27 | * When to use Static class and when Singleton? 28 | 29 | [Link 1](https://javarevisited.blogspot.com/2013/03/difference-between-singleton-pattern-vs-static-class-java.html) 30 | 31 | [Link 2](http://www.crazyforcode.com/cant-static-class-singleton/) 32 | 33 | * OnClickListener Internals 34 | 35 | [Link 1](https://stackoverflow.com/questions/32884665/how-does-androids-setonclicklistener-works) 36 | 37 | [Link 2](https://stackoverflow.com/questions/11815101/view-onclicklistener-a-function-or-interface) 38 | 39 | * [Hashmap Internals](https://www.javatpoint.com/working-of-hashmap-in-java) 40 | 41 | * [ArrayList Internals](https://www.netjstech.com/2015/08/how-arraylist-works-internally-in-java.html) 42 | 43 | * [LinkedList Internals](https://www.netjstech.com/2015/08/how-linked-list-class-works-internally-java.html) 44 | 45 | [Link 2](https://dzone.com/articles/linked-list-journey-continues) 46 | 47 | * Reflection in Java 48 | 49 | [Link 1](http://tutorials.jenkov.com/java-reflection/index.html) 50 | 51 | [Link 2](https://www.edureka.co/blog/java-reflection-api/) 52 | 53 | * [Garbage Collection](https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/) 54 | 55 | * Why Java is platform independent? 56 | 57 | [Link 1](https://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread-in-java#:~:text=When%20you%20extends%20Thread%20class,same%20object%20to%20multiple%20threads.) 58 | 59 | [Link 2](https://www.geeksforgeeks.org/java-platform-independent/) 60 | 61 | * Implements Runnable vs extends Thread 62 | 63 | [Link 1](https://medium.com/@neil.wilston123/why-java-is-platform-independent-1d82c2249a69#:~:text=Irrespective%20of%20the%20platform%20the,is%20called%20platform%20independent%20language.&text=oriented%20programming%20language.-,It%20is%20a%20platform%20independent%20language%20i.e.%20the%20compiled%20code,on%20any%20java%20supporting%20platform.) 64 | 65 | [Link 2](https://www.geeksforgeeks.org/implement-runnable-vs-extend-thread-in-java/) 66 | 67 | * [Sparse Array vs Hashmap](https://stackoverflow.com/questions/25560629/sparsearray-vs-hashmap#:~:text=A%20sparse%20array%20in%20Java,is%20a%20key%2Cvalue%20pair) 68 | 69 | * [Static vs Singleton](https://stackoverflow.com/questions/3532161/what-is-the-difference-between-a-singleton-pattern-and-a-static-class-in-java) 70 | 71 | * [Lambda vs Anonymous Classes](https://stackoverflow.com/questions/22637900/java8-lambdas-vs-anonymous-classes) 72 | 73 | * [Stack vs Heap Memory]( https://www.journaldev.com/4098/java-heap-space-vs-stack-memory#:~:text=Difference%20between%20Java%20Heap%20Space%20and%20Stack%20Memory,-Based%20on%20the&text=Heap%20memory%20is%20used%20by,contains%20the%20reference%20to%20it) 74 | 75 | * [When to use Handler/thread?](https://stackoverflow.com/questions/31761351/difference-between-thread-and-handler) 76 | 77 | * [Handler Internals](https://medium.com/mindorks/mastering-android-handler-4f710296bdc6) 78 | 79 | * [Java to Kotlin](https://medium.com/google-developer-experts/from-java-to-kotlin-and-back-i-java-calling-kotlin-9abfc6496b04) 80 | 81 | ## Android 82 | 83 | * [D8 vs R8](https://stackoverflow.com/questions/49549187/difference-between-d8-and-r8-android) 84 | 85 | * [ART vs Dalvik](https://software.intel.com/content/www/us/en/develop/blogs/art-vs-dalvik-introducing-the-new-android-x86-runtime.html) 86 | 87 | * [Android 11 Features](https://www.androidauthority.com/android-11-features-1085228/) 88 | 89 | * [FAQ on Scoped Storage](https://medium.com/androiddevelopers/android-11-storage-faq-78cefea52b7c) 90 | 91 | * [Launch Modes](https://medium.com/mindorks/android-launch-mode-787d28952959) 92 | 93 | * [Recent changes in Play store](https://android-developers.googleblog.com/2020/06/introducing-new-google-play-console-beta.html) 94 | 95 | * [Activity Life Cycle](https://blog.mindorks.com/android-activity-lifecycle) 96 | 97 | * [Fragment LifeCycle](https://blog.mindorks.com/android-fragments-and-its-lifecycle) 98 | 99 | * [Fragment Transition](https://androidlearnersite.wordpress.com/2017/02/27/fragment-lifecycle-during-fragment-transaction/) 100 | 101 | * MVP vs MVVM vs MVI 102 | 103 | [Link 1](https://www.ericdecanini.com/2020/07/20/battle-of-the-android-architectures-mvp-vs-mvvm-vs-mvi/#:~:text=With%20MVI%2C%20you%20have%20to,The%20winner%20is%20MVVM) 104 | 105 | [Link 2](https://medium.com/mindorks/the-evolution-of-android-architectures-mvp-mvvm-mvi-f72f67093b81) 106 | 107 | * [How MVI works](https://blog.mindorks.com/mvi-architecture-android-tutorial-for-beginners-step-by-step-guide) 108 | 109 | * [How MVI works?](https://blog.mindorks.com/mvi-architecture-android-tutorial-for-beginners-step-by-step-guide) 110 | 111 | * [Mediator vs Mutable Live Data](https://stackoverflow.com/questions/46930335/what-is-difference-between-mediatorlivedata-and-mutablelivedata-in-mvvm) 112 | 113 | * [Why and when to use Mediator Live Data](https://medium.com/teachmind/necessity-of-viewmodel-and-difference-between-mutablelivedata-and-mediatorlivedata-f1c30df27232) 114 | 115 | * [Livedata transformations and Mdeiatot LiveData](https://medium.com/androiddevelopers/livedata-beyond-the-viewmodel-reactive-patterns-using-transformations-and-mediatorlivedata-fda520ba00b7) 116 | 117 | * [LiveData vs Observable Field](https://blog.mindorks.com/livedata-vs-observable-in-android) 118 | 119 | * [Sealed Classes](https://blog.mindorks.com/learn-kotlin-sealed-classes) 120 | 121 | * [Data Classes](https://blog.mindorks.com/learn-kotlin-data-class) 122 | 123 | * [setValue vs PostValue](https://stackoverflow.com/questions/51299641/difference-of-setvalue-postvalue-in-mutablelivedata) 124 | 125 | * [Exceptions vs Error](https://www.geeksforgeeks.org/errors-v-s-exceptions-in-java/) 126 | 127 | * [Memory Leaks](https://riggaroo.dev/fixing-memory-leaks-in-android-outofmemoryerror/) 128 | 129 | * [Solve OOM](https://blog.mindorks.com/practical-guide-to-solve-out-of-memory-error-in-android-application) 130 | 131 | * [How to find OOM through hProf](http://innovationm.co/android-out-of-memory-error-causes-solution-and-best-practices/) 132 | 133 | * [Understanding MultiDex](https://blog.mindorks.com/understanding-multidex-in-android) 134 | 135 | * [Hardware Acceleration](https://www.androidauthority.com/hardware-acceleration-1006947/) 136 | 137 | [Link 2](https://developer.android.com/guide/topics/graphics/hardware-accel) 138 | 139 | * [Understanding Webview methods](https://www.sitepoint.com/understanding-android-webviews/) 140 | 141 | * [Memory Leak in WebView](https://stackoverflow.com/questions/3130654/memory-leak-in-webview/8949378#8949378) 142 | 143 | * [WebView Best Practices](https://www.checkmarx.com/2017/11/16/android-webview-secure-coding-practices/) 144 | 145 | * [WebView vs ChromeTab](https://stackoverflow.com/questions/42689996/webview-vs-chrome-custom-tab) 146 | 147 | * [Custom Tab - What, How, When, Why](https://developer.chrome.com/multidevice/android/customtabs) 148 | 149 | * [Under FCM concepts for Foreground and Background](https://firebase.google.com/docs/cloud-messaging/concept-options) 150 | 151 | * [Memory Management](https://developer.android.com/topic/performance/memory-overview) 152 | 153 | [Link 2](https://medium.com/@nik.arora8059/memory-management-in-android-3bdf307c8e23) 154 | 155 | [Link 3](https://developer.android.com/topic/performance/memory) 156 | 157 | * [Understanding Job Scheduler](https://developer.android.com/reference/android/app/job/JobSchedule) 158 | 159 | * [If u need all-time location access, what should you do?](https://developer.android.com/training/location/background#evaluate) 160 | 161 | * [LayoutAnimation attribute for recyclerView not working for some devices?](https://blog.usejournal.com/recyclerview-android-layoutanimation-not-working-7e4f3e6da9f) 162 | 163 | * [RecyclerView Internals](https://android.jlelse.eu/anatomy-of-recyclerview-part-1-a-search-for-a-viewholder-404ba3453714) 164 | 165 | [Link 2](https://android.jlelse.eu/anatomy-of-recyclerview-part-1-a-search-for-a-viewholder-continued-d81c631a2b91#.dcsykhoh9) 166 | 167 | [Link 3](https://medium.com/@nileshsingh/understanding-recyclerview-part-1-the-basics-a7bd07cfae93) 168 | 169 | * [Migration to Paging 3](https://proandroiddev.com/how-to-use-the-paging-3-library-in-android-5d128bb5b1d8) 170 | 171 | [Link 2](https://developer.android.com/topic/libraries/architecture/paging/v3-overview) 172 | 173 | * [WorkManager vs JobScheduler](https://stackoverflow.com/questions/50279364/android-workmanager-vs-jobscheduler) 174 | 175 | * [Why & How DiffUtil?](https://medium.com/@iammert/using-diffutil-in-android-recyclerview-bdca8e4fbb00) 176 | 177 | * [Lifecycle View in Android](https://proandroiddev.com/the-life-cycle-of-a-view-in-android-6a2c4665b95e) 178 | 179 | [Link 2](https://proandroiddev.com/android-custom-view-level-1-67ed1c3febe1) 180 | 181 | * [Kotlin Flow](https://proandroiddev.com/kotlin-flow-on-android-quick-guide-76667e872166) 182 | 183 | * [The SOLID Principles for Android Developers](https://medium.com/kayvan-kaseb/the-solid-principles-for-android-developers-75fd4ca3ef84) 184 | 185 | * [Kotlin Quick tips](https://medium.com/better-programming/7-quick-kotlin-tips-for-android-developers-884d1021ab1d) 186 | 187 | * [Jetpack Navigation between top-level destinations using Dagger-Hilt](https://itnext.io/simplifying-jetpack-navigation-between-top-level-destinations-using-dagger-hilt-3d918721d91e) 188 | 189 | * [OkHttp vs Retrofit](https://medium.com/mobile-app-development-publication/okhttp-or-retrofit-for-android-fc00f7aa3daf) 190 | 191 | * [Understanding Android New Results API](https://medium.com/swlh/android-new-results-api-and-how-to-use-it-to-make-your-code-cleaner-de20d5c1fffa) 192 | 193 | * [RecyclerView Tips](https://medium.com/swlh/common-mistake-developers-make-when-building-recyclerviews-and-how-to-fix-it-using-3b642a2ba0f4) 194 | 195 | * [LiveData with Coroutines and Flow ](https://medium.com/androiddevelopers/livedata-with-coroutines-and-flow-part-ii-launching-coroutines-with-architecture-components-337909f37ae7) 196 | 197 | * [Why @JvmOverloads in Kotlin](https://proandroiddev.com/misconception-about-kotlin-jvmoverloads-for-android-view-creation-cb88f432e1fe) 198 | 199 | * [Understanding Elvis Operator pitfalls](https://medium.com/google-developer-experts/the-hidden-pitfalls-of-the-elvis-operator-da536ba68161) 200 | 201 | * [Understanding Scoped Storage](https://medium.com/@nik.arora8059/android-scoped-storage-demystified-3024a062ba24) 202 | 203 | * [Understanding Android AllowBackup](https://medium.com/better-programming/androids-attribute-android-allowbackup-demystified-114b88087e3b) 204 | 205 | * [Understanding JSON Web Token](https://medium.com/better-programming/what-exactly-is-a-json-web-token-678e8a8a5fe4) 206 | 207 | * [ConstraintLayout](https://medium.com/androiddevelopers/introducing-constraint-layout-2-0-9daa3e99995b) 208 | 209 | * [Should we use largeHeap attribute in Android manifest](https://stackoverflow.com/questions/27396892/what-are-advantages-of-setting-largeheap-to-true) 210 | 211 | * [Coroutines vs RxJava](https://www.codemotion.com/magazine/dev-hub/mobile-dev/async-code-on-kotlin-coroutines-vs-rxjava/) 212 | 213 | * [Mockito vs Mockk](https://stackshare.io/stackups/mockito-vs-mockk) 214 | 215 | * [Best practices to test Static Methods](https://www.javaindeed.com/3-best-practices-to-test-a-code-that-calls-static-methods/) 216 | 217 | * [Writing Testable Code](https://www.toptal.com/qa/how-to-write-testable-code-and-why-ait-matters) 218 | 219 | * [JUnit Annotations](https://www.vogella.com/tutorials/JUnit/article.html) 220 | 221 | * [Why Mockito can't mock static methods](https://stackoverflow.com/questions/4482315/why-doesnt-mockito-mock-static-methods) 222 | 223 | * [apply vs let vs run in Kotlin](https://medium.com/@fatihcoskun/kotlin-scoping-functions-apply-vs-with-let-also-run-816e4efb75f5) 224 | 225 | * [Improve recyclerView Performance](https://medium.com/@farshidabazari/improve-recyclerview-performance-ede5cec6c5bf) 226 | 227 | * [Understand Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) 228 | 229 | * [Memory management and Leaks](https://medium.com/swlh/an-introduction-to-memory-management-and-memory-leaks-on-android-3dbd66d8a943) 230 | 231 | * [Which context to use](https://medium.com/@ali.muzaffar/which-context-should-i-use-in-android-e3133d00772c) 232 | 233 | * [Steps to Build a quality app](https://medium.com/bcgdv-engineering/to-build-a-quality-app-you-must-consider-these-8-points-c1ea9befc791) 234 | 235 | * [DDMS vs Android Profiler](https://www.softwaretestinghelp.com/android-memory-leak-testing/) 236 | 237 | * [Activity Process LifeCycle](https://developer.android.com/guide/components/activities/process-lifecycle) 238 | 239 | * [System vs Data Notification - FCM](https://stackoverflow.com/questions/37947541/what-is-the-difference-between-firebase-push-notifications-and-fcm-messages/37948441) 240 | 241 | * [Scheduler vs Dispatcher](https://afteracademy.com/blog/difference-between-scheduler-and-dispatcher#:~:text=The%20scheduler%20selects%20a%20process,from%20one%20state%20to%20another) 242 | 243 | * [ViewModelFactory](https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel-8fabfec1aa4f) 244 | 245 | * [Custom Chrome Tabs](https://stackoverflow.com/questions/42689996/webview-vs-chrome-custom-tab) 246 | 247 | * [Progressive vs Native App](https://www.mobiloud.com/blog/progressive-web-apps-vs-native-apps/) 248 | 249 | * [SDK vs Non SDK interfaces](https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces) 250 | 251 | * [View Life Cycle](https://proandroiddev.com/android-custom-view-level-3-81e767c8cc75) 252 | 253 | * [How Vector drawable works](https://medium.com/@duhroach/how-vectordrawable-works-fed96e110e35#:~:text=For%20Android%2C%20the%20rasterization%20process,dimensions%20of%20the%20image%20itself) 254 | 255 | * [Dagger vs Koin](https://medium.com/mobile-app-development-publication/dagger-2-and-koin-comparison-4223dae9725d) 256 | 257 | * [Handler vs HandlerThread vs Looper](https://blog.mindorks.com/android-core-looper-handler-and-handlerthread-bd54d69fe91a) 258 | 259 | * [Enum vs Sealed Classes](https://blog.kotlin-academy.com/enum-vs-sealed-class-which-one-to-choose-dc92ce7a4df5#:~:text=Enum%20classes%20represent%20a%20concrete,a%20concrete%20set%20of%20classes.&text=Enums%20have%20ordinal%20and%20we,can%20hold%20instance%2Dspecific%20data) 260 | 261 | * [Understand Vector drawable path commands](https://medium.com/@ali.muzaffar/understanding-vectordrawable-pathdata-commands-in-android-d56a6054610e) 262 | 263 | * [Custom Views performance](https://android.jlelse.eu/prefmatters-using-custom-views-in-android-to-improve-performance-part-1-4dc9bdd75396) 264 | 265 | * [Know About Memory Leaks](https://proandroiddev.com/everything-you-need-to-know-about-memory-leaks-in-android-d7a59faaf46a) 266 | 267 | * [FindViewById vs Synthetic Binding](https://medium.com/coding-blocks/goodbye-findviewbyid-say-hello-to-synthetic-binding-in-kotlin-d3727bd8438e) 268 | 269 | * [How Enums Impact performance](https://medium.com/@pavan.careers5208/android-how-enums-can-impact-the-performance-f787ef5903dd?source=email-e1fb03b9ea54-1599254514394-digest.reader------1-71------------------1ccd1b6a_1954_4c65_b478_d12b51bd2f63-27-005e4f96_3695_4f94_9d30_f03c8720b8f6----§ionName=icymi) 270 | 271 | * [Parcelable Interface implementation]( https://medium.com/@royanimesh2211/implementing-the-parcelable-interface-in-android-b404819ca441?source=email-e1fb03b9ea54-1600207123318-digest.reader------1-72------------------d7fd371c_0158_472e_9bea_8a49d36691e7-28-----§ionName=quickReads) 272 | 273 | * [Android Vitals](https://dev.to/pyricau/android-vitals-what-time-is-it-2oih) 274 | 275 | * [Rx with Retrofit](https://www.journaldev.com/20433/android-rxjava-retrofit) with [sample](https://www.androidhive.info/RxJava/android-rxjava-networking-with-retrofit-gson-notes-app/) 276 | 277 | * Understand Android DataBinding : https://www.raywenderlich.com/7711166-data-binding-in-android-getting-started 278 | 279 | * How recyclerView works internally? : https://medium.com/1mgofficial/how-recyclerview-works-internally-71290de5d2c4 280 | 281 | * Annotation Processor : https://aitorvs.medium.com/annotation-processing-in-android-studio-7042ccb83024 282 | 283 | * Design Pattern : https://www.raywenderlich.com/18409174-common-design-patterns-and-app-architectures-for-android 284 | 285 | * Kotlin Questionnaire : https://imstudio.medium.com/kotlin-interview-questions-part-2-4f2f2b05063b 286 | 287 | * Coroutine Exception Handling CheatSheet : https://www.lukaslechner.com/coroutines-exception-handling-cheat-sheet/ 288 | 289 | * StateFlow vs SharedFlow : https://proandroiddev.com/should-we-choose-kotlins-stateflow-or-sharedflow-to-substitute-for-android-s-livedata-2d69f2bd6fa5 290 | 291 | * Kotlin Flows : https://elizarov.medium.com/exceptions-in-kotlin-flows-b59643c940fb 292 | 293 | * When to use Coroutines.unconfined? : https://stackoverflow.com/questions/55169711/when-should-i-use-dispatchers-unconfined-vs-emptycoroutinecontext#:~:text=or%20null%20objects.-,Dispatchers.,code%20from%20blocking%20world%20callbacks 294 | 295 | * Lateinit vs Lazy : https://blog.mindorks.com/learn-kotlin-lateinit-vs-lazy 296 | 297 | * Activity result API : https://proandroiddev.com/is-onactivityresult-deprecated-in-activity-results-api-lets-deep-dive-into-it-302d5cf6edd#:~:text=The%20new%20Activity%20Result%20API,other%20third%20party%20library%20anymore 298 | 299 | * Lifecycle aware components : https://developer.android.com/topic/libraries/architecture/lifecycle 300 | 301 | * ViewModel under the hood : https://blog.mindorks.com/android-viewmodels-under-the-hood 302 | 303 | * SavedState Handle : https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate 304 | 305 | * WorkManager under the hood : https://medium.com/android-news/androidx-workmanager-%EF%BE%89-%EF%BE%89-some-details-under-the-hood-a5ca1099c93 306 | 307 | * Shared Preference under the hood : https://proandroiddev.com/shared-preferences-101-aee26c13e4 308 | 309 | * Fragment vs Custom View : https://stackoverflow.com/questions/31236020/fragment-vs-custom-view-in-android 310 | 311 | * RecyclerView ViewHolder : https://jonfhancock.com/your-viewholders-are-dumb-make-em-not-dumb-82e6f73f630c 312 | 313 | * Ktx Extensions : https://developer.android.com/kotlin/ktx 314 | 315 | * merge vs include in layout : https://alltechsolution.wordpress.com/2012/06/13/difference-between-merge-includeand-tag-in-android/ 316 | 317 | * Okhttp interceptors under the hood : https://blog.codavel.com/how-to-create-an-http-interceptor-for-an-android-app-using-okhttp3 318 | 319 | * Retrofit under the hood : https://www.ekchang.com/breakdown/2016/06/11/retrofit-breakdown.html 320 | 321 | * Create your own livedata : https://medium.com/androidiots/how-i-made-my-own-livedata-1faf4a45520 322 | 323 | * Enum vs sealed class : https://blog.kotlin-academy.com/enum-vs-sealed-class-which-one-to-choose-dc92ce7a4df5 324 | 325 | * ViewModel Best Practices : https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54 326 | 327 | * Pros/cons of Multiple processes on Android : https://stackoverflow.com/questions/19744906/what-are-pros-and-cons-of-using-multiple-processes-within-android-application#:~:text=Cons%3A,and%20the%20perhaps%20application%20performance 328 | 329 | * How room works internally? : https://blog.mindorks.com/how-does-room-work-internally 330 | 331 | * How leak Canary Works? : https://square.github.io/leakcanary/fundamentals-how-leakcanary-works/ 332 | 333 | * Mockito vs Mockk : https://stackshare.io/stackups/mockito-vs-mockk 334 | 335 | * Mock vs Stub vs spy in Unit Testing : https://www.javatpoint.com/mock-vs-stub-vs-spy#:~:text=Mocks%20are%20used%20to%20create,used%20in%20large%20test%20suites 336 | 337 | * Mockito vs PowerMock : https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone 338 | 339 | 340 | ## Sharing some good resources from where one can learn: 341 | 342 | * Developer Guide: https://developer.android.com/guide 343 | * Codelabs: https://codelabs.developers.google.com/ 344 | * Udacity: https://www.udacity.com 345 | * Scaler Topics: https://www.scaler.com/topics/ 346 | * MindOrks: https://mindorks.com 347 | * Ray Wenderlich: https://www.raywenderlich.com/ 348 | * CodingWithMitch: https://www.youtube.com/channel/UCoNZZLhPuuRteu02rh7bzsw 349 | * Awesome Learning Resources: https://github.com/androiddevnotes/awesome-android-learning-resources 350 | * Best Practices: https://proandroiddev.com/android-development-best-practices-7278e9cdbbe9 351 | * Interview Questions: https://github.com/niharika2810/android-interview-questions 352 | * Refactoring : https://www.amazon.in/dp/8131734668/ref=cm_sw_r_wa_apa_fab_XPmEFb2A4W4TJ 353 | * Clean Code : https://github.com/ontiyonke/book-1/blob/master/%5BPROGRAMMING%5D%5BClean%20Code%20by%20Robert%20C%20Martin%5D.pdf 354 | 355 | 356 | 357 | Will be updating (once/twice a week) with more after sorting them out. Please contribute if you have more so that I can also learn. :-) 358 | 359 | 360 | Enjoy Reading!! 361 | 362 | 363 | 364 | 365 | 366 | --------------------------------------------------------------------------------