ViewModels & Configuration Changes - Android Basics 2023

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 มิ.ย. 2023
  • In this video I'll explain what ViewModels are and why they have a special place on Android.
    ⭐ Get certificates for your future job
    ⭐ Save countless hours of time
    ⭐ 100% money back guarantee for 30 days
    ⭐ Become a professional Android developer now:
    pl-coding.com/premium-courses...
    Get my FREE PDF about 20 things you should never do in Jetpack Compose:
    pl-coding.com/jetpack-compose...
    💻 Let me be your mentor and become an industry-ready Android developer in 10 weeks:
    pl-coding.com/drop-table-ment...
    Subscribe to my FREE newsletter for regular Android, Kotlin & Architecture advice!
    pl-coding.com/newsletter
    Join this channel to get access to perks:
    / @philipplackner
    Join my Discord server:
    / discord
    Regular programming advice on my Instagram page: / _philipplackner_
    Checkout my GitHub: github.com/philipplackner
    You like my free content? Here you can buy me a coffee:
    www.buymeacoffee.com/philippl...

ความคิดเห็น • 99

  • @psytoolkit
    @psytoolkit 8 หลายเดือนก่อน +16

    I do not know how anyone can learn Android coding without these videos, thank you so much.

  • @mastmusic2837
    @mastmusic2837 2 หลายเดือนก่อน +3

    This is at least 100% better then developer.android blog. Excellent.

  • @nesletchimaew9209
    @nesletchimaew9209 9 หลายเดือนก่อน +12

    You're making me learn compose in a mere couple of weeks. Why is noone else coming up with these essential videos? These solutions are so simple yet noone will mention them in a documentation

    • @adrianivasku6400
      @adrianivasku6400 6 หลายเดือนก่อน

      I dont like that he uses compose in each video. Sure it is nice if you want to learn it but I like when something is explained without much boilerplate. His older videos were more focused, idk. Nowadays he explains that subject but also 10 other :).

    • @notimportant2478
      @notimportant2478 6 หลายเดือนก่อน

      the tutorials from Google are also very good

  • @abuiman5251
    @abuiman5251 10 หลายเดือนก่อน +2

    Perfect as usual, Philipp! I wish you a lot more subscribers! Keep sharing your knowledge please in a clear and understandable way! Danke😉

  • @diulianovargasdasilveira3900
    @diulianovargasdasilveira3900 10 หลายเดือนก่อน +1

    You're the goat i was having difficult in state management and your video clarify my mind, thanks

  • @skarloti
    @skarloti ปีที่แล้ว +27

    I really liked that you explained in such great detail. When you don't use Dagger-Hilt, everything becomes clearer despite the boilerplate code. I had a lot of memory leak issues with Context 🎉

    • @USS_Daedalus
      @USS_Daedalus ปีที่แล้ว

      Yeah i had the same its difficult to avoid Memory leaks if app context needed in ViewModel. But after i implemented Dagger Hilt, this Problem is practical non existent.

    • @skarloti
      @skarloti ปีที่แล้ว +2

      @@USS_Daedalus There are different approaches and sometimes you can work around using Context. However with injection it is much easier and I prefer Koin (KMP) instead Hilt (Android).

  • @abr464
    @abr464 ปีที่แล้ว +2

    Thank you Philipp for all your work. You are really an inspiration for me as Android Developer and I've learned so much thanks to you 😊

  • @sidbot9622
    @sidbot9622 3 หลายเดือนก่อน +2

    Thanks it really cleared my doubt i was confused but now its clear.

  • @alexnovikov1609
    @alexnovikov1609 11 หลายเดือนก่อน +1

    It's a very clear and detailed explanation as usual. Thank you!

  • @matteoZattera
    @matteoZattera ปีที่แล้ว +1

    Perfect explanation, thanks Philipp

  • @marekwalica4418
    @marekwalica4418 ปีที่แล้ว +1

    Very clearly explained. Thank you very much

  • @braynM
    @braynM 11 หลายเดือนก่อน

    I just want to thank you, I am learning a lot from your videos! Cheers!

  • @loveyouself5389
    @loveyouself5389 20 วันที่ผ่านมา

    In depth explanation thank you so much Philipp

  • @Alchemist10241
    @Alchemist10241 ปีที่แล้ว +1

    Videos like this are necessary for developers in any level, sometime you need to know how a component really works and what its purpose is, in order to avoid bugs, performance issues and leaks.

  • @56redgreen
    @56redgreen 2 หลายเดือนก่อน

    I have learnt a lot of languages and watched a lot of videos but yours are next level, whatever I need you have a video and exactly at the level I need and perfectly explained.

  • @shriganapatiyoga
    @shriganapatiyoga ปีที่แล้ว

    thx a lot for this basics video!

  • @jishnugoyal4397
    @jishnugoyal4397 11 หลายเดือนก่อน +2

    Great series! Maybe you could include things like - this could be asked in an android interview and share some trick questions :)

  • @mircodev
    @mircodev 11 หลายเดือนก่อน

    Thx for this great video.

  • @abovemediocrity245
    @abovemediocrity245 9 หลายเดือนก่อน +13

    Is Google making all this unnecessarily complex? Newbie here

    • @sumitfd2704
      @sumitfd2704 4 หลายเดือนก่อน +2

      It's actually the opposite

    • @saadahmed688
      @saadahmed688 2 หลายเดือนก่อน +2

      Not necessarily Google but OOP is. Android development is the worst abstraction hell out there

    • @tbird81
      @tbird81 หลายเดือนก่อน +1

      It makes perfect sense to destroy an activity and forget everything whenever the screen rotates. Really forward thinking from Google.

  • @meme_Overflow
    @meme_Overflow ปีที่แล้ว +3

    Please make a video on how to make usecases for a complex app having many features
    This series is gonna be very useful

  • @Noor_alden
    @Noor_alden 11 หลายเดือนก่อน

    thanks for great content 🙏🙏❤ ,

  • @shreyasenterprises5617
    @shreyasenterprises5617 วันที่ผ่านมา

    Thanks

  • @Kanha0321
    @Kanha0321 11 หลายเดือนก่อน

    a big thanks to all your efforts one day i will surely become a great android developer only because of you ❤

  • @salimsyc
    @salimsyc 4 หลายเดือนก่อน +2

    Perfectly explained, I have been struggling the idea of mvvm and how it works, but now WOW. Thanks man very appreciated.

  • @VictorFarkas-fp2gl
    @VictorFarkas-fp2gl 11 หลายเดือนก่อน

    sehr schön 👍aka very nice

  • @ryokuman1916
    @ryokuman1916 8 หลายเดือนก่อน

    you are the best bro

  • @user-cd2uw7ec3s
    @user-cd2uw7ec3s 3 หลายเดือนก่อน

    Hi, Philipp! Thank you so much 🙏 I would like to ask you what is written on your T-shirt in this video? Thanks

  • @smallpadz
    @smallpadz 2 หลายเดือนก่อน

    Philipp the 🐏 in Android tutorials 🔥

  • @leonmarienga3293
    @leonmarienga3293 2 หลายเดือนก่อน

    thanks

  • @AMALSHIWANTHA
    @AMALSHIWANTHA ปีที่แล้ว

    ❤ good one

  • @AboAbdulrahman_YT
    @AboAbdulrahman_YT 7 หลายเดือนก่อน

    thank you.. I was stuck and didnt know whats wrong,, turned out i needed to sync it..

  • @fernandogoncalves1891
    @fernandogoncalves1891 19 วันที่ผ่านมา

    In order to get data from Broacastreceiver to compose functions should we use this aproach?

  • @khangchow5694
    @khangchow5694 11 หลายเดือนก่อน

    Hi sir, thanks for your helpful series. But I got one more question about the differences between MVP and MVVM, can you help me figure it out. Thankyou

  • @dikenmhrz3902
    @dikenmhrz3902 ปีที่แล้ว

    if model layer is exposing a list of objects with epoch time, is it good to convert all of them to new object by parsing them to corresponding strings?.. If I follow this approach, I would have 4 data classes that represents the same data: dto, entity, model that repository exposes and model that is parsed for the view. Should I follow this approach?

  • @oktaygenc4599
    @oktaygenc4599 5 หลายเดือนก่อน

    Hello, which theme are you using, it looks very nice ?

  • @RamazanOzerr
    @RamazanOzerr 11 หลายเดือนก่อน +2

    Can you please explain the reason of getting dublicate class error? thanks

  • @anuraganand5945
    @anuraganand5945 8 หลายเดือนก่อน

    Awesome

  • @kiikaala
    @kiikaala 5 หลายเดือนก่อน +1

    User: turns the screen
    Activity: nooo! I don't want to die!!!

  • @yaakoubhamad4852
    @yaakoubhamad4852 ปีที่แล้ว +2

    👌👌

  • @M4t3u5zzz
    @M4t3u5zzz 11 หลายเดือนก่อน

    Hello, can you make a wideo with istalation of Android studio and show how to config it, and what emulator you use ?

  • @jade6614
    @jade6614 ปีที่แล้ว

    The GOAT ♥

  • @RodrigoAbreuOliveira
    @RodrigoAbreuOliveira ปีที่แล้ว +1

    Congratulations Philipp. A simple question, can I work with WorkManager inside the ViewModel class?

    • @PhilippLackner
      @PhilippLackner  ปีที่แล้ว +4

      You can, but I'd keep them free of Android dependencies to make them locally unit testable

  • @Galaktick_Vovchik
    @Galaktick_Vovchik 11 หลายเดือนก่อน

    Thanks, you explain kotlin compose very well. There is little information at an advanced level in the Russian-speaking segment.

  • @mckenytech8033
    @mckenytech8033 ปีที่แล้ว +1

    Thank you bro...was waiting on this to start using KMM...will this work for compose ios if I share the ui and the logics ?

    • @PhilippLackner
      @PhilippLackner  ปีที่แล้ว

      Not like I showed here since you're dealing with an Android specific dependency, but there are ways to make it work

  • @andrewdunbar828
    @andrewdunbar828 9 หลายเดือนก่อน +3

    Is this telling us we need to use ViewModel or just what it can be used for if we want to use it? Is it the only way to handle configuration changes or is it an alternative to APIs like rememberSaveable?

    • @nesletchimaew9209
      @nesletchimaew9209 9 หลายเดือนก่อน +1

      The deciding factor should be speed. If your project is simple enough, you can use rememberSaveable and it runs perfectly fine, you don't need much code either. If you have more complexity, it's better to use remember in combination with a viewmodel. Usually when it becomes too complex, you have a lot of logic functions regarding how you map your states. This is best done in a viewmodel to create the separation from the ui. This way the code is more flexible and less buggy. You can then update and save 100 specifically selected states in 1 small function according to a logic algorithm. Of course you would never reach this efficiency using rememberSaveable

    • @andrewdunbar828
      @andrewdunbar828 8 หลายเดือนก่อน +1

      @@nesletchimaew9209 Thanks! In some ways it's a tricky time to be an Android noob during the change from Views to Compose and picking up only bits and pieces of techniques and terminology from each with so much info referring to or expecting knowledge of earlier stuff. So far I've only done simple enough things to juse rememberSaveable but even then got lost with the list and mutable versions.

    • @nesletchimaew9209
      @nesletchimaew9209 8 หลายเดือนก่อน

      @@andrewdunbar828 it's very hard to find info on what you can do to make things easier. I use a wrapper class with a val value: T so that primitive data types can get put into the same class type. When I set a state for a boolean, i say val bs = States.VALUE.BOOLEAN(true). Then i make a map in the viewmodel for each data class i need to have access to in the UI. Then I put all of them i side another map, and make a new privatemap with mutable stateflows for all of them, and another public one using the mutable stateflows as regular stateflows. In the UI I then collect all of them as stateflows and then as states. The state in the UI will then be of the following type:
      Map
      If I have a States.VALUE and want to get the value, i have to read it like this: lets say i need a boolean, i go into the map and fetch the value like this:
      val entry = map[someConstant][someOtherConstant]
      i then read the state like this
      val state: Boolean = (entry as States.VALUE.BOOLEAN).value
      of course i have dozens of helper functions that do all of this with a few lines of code

  • @brianquigley1940
    @brianquigley1940 หลายเดือนก่อน

    ~15:00 the crash due to adding a parameter... this type of issue is why I am having so much difficulty learning how to use Android... half the time, there is no obvious reason why a crash occurs, and the log often gives the wrong line number... is there an easy way to debug such problems?

  • @imamulhasanrana4431
    @imamulhasanrana4431 ปีที่แล้ว +1

    Hi Philipp, Can You Also Make a Video About Repository And Data Classes? Would Be very Helpful

    • @PhilippLackner
      @PhilippLackner  ปีที่แล้ว +3

      Those are both not really android specific concepts, but I might make one about repos on future

  • @alix3665
    @alix3665 3 หลายเดือนก่อน

    If I find my first job, I will donate you to show my love❤

  • @takeseem
    @takeseem 3 หลายเดือนก่อน

    安卓现在的框架给我的感觉很庞杂,有时候不知从何入手。但是这个视频讲解了ViewModel是什么,怎样手动构造,这样只要懂基本的知识就能使用,拨开了框架的神秘面纱。

  • @BlackSkyCrew
    @BlackSkyCrew ปีที่แล้ว

    It's a cool explanation of MVVM, but what a pity I don't have enough money to buy your premium courses...

  • @user-op9oq7xd6s
    @user-op9oq7xd6s 11 หลายเดือนก่อน

    You are great! I learn so much from you and still improving myself. I have a small request from you, Please create a playlist/single video for MVVM architecture with Retrofit API call. Also please make this with Activity & XML (don't use Jetpack Compose).

  • @postforest_in
    @postforest_in 5 หลายเดือนก่อน

    sir, how to know that meetups are going on and how to join them and joining them is worth it ?

  • @mountrat
    @mountrat 23 วันที่ผ่านมา

    Hi! Is there any compose view for single row calendar view? With date highlight?

    • @mountrat
      @mountrat 23 วันที่ผ่านมา

      If yes, can you please help me to get reference

    • @mountrat
      @mountrat 23 วันที่ผ่านมา

      I saw the similar kind of requirements from philip lackner. But still, I could not find it anywhere

  • @rizkysiregar
    @rizkysiregar ปีที่แล้ว

    cool bro

  • @kernelpanic1697
    @kernelpanic1697 9 หลายเดือนก่อน

    Hey! can you share your green wallpaper?

  • @quicksketch1617
    @quicksketch1617 11 หลายเดือนก่อน

    Hi, I never know how to import viewModel. Using by viewmodels() is the newest way? What os the best way to use viewModel with XML. Do you have tutorials?

    • @PhilippLackner
      @PhilippLackner  11 หลายเดือนก่อน +1

      by viewModels() for XML projects and the composable function for Compose projects

  • @marksears3117
    @marksears3117 11 หลายเดือนก่อน

    What emulator do you use?

  • @ChrisAthanas
    @ChrisAthanas ปีที่แล้ว +3

    10:25 i just want to say out loud that the whole confusing configuration change hack since android OS 1.0 is a ridiculous hack and should have been addressed years ago
    What a sloppy mess

    • @marklim4271
      @marklim4271 10 หลายเดือนก่อน

      but it is addressed, it's just opt-in, you do it like that: (this is xamarin c# but you get the point) ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation. This way you say to Android "I will handle screen size changes and orientation changes myself".
      With those flags the whole activity re-creation won't happen on rotation, and it's especially nice when you use ConstraintLayout, the whole rotation of your app is smoother and ConstraintLayout re-calculates the view layout automatically
      View re-creation is there "because it was that way from the beginning", and it was that way because there was no ConstraintLayout for quite some time.
      Nowadays this is completely unnecessary, it only slows down app on rotation and it's one more thing that brings a lot of gotcha bugs.
      iOS doesn't recreate view on rotation, it just triggers AutoLayout and this is why rotation on iOS is smoother.

  • @brianquigley1940
    @brianquigley1940 หลายเดือนก่อน

    Kotlin, OOP, Android... the more I learn, the more I am completely stunned at how ludicroulsy complex it is... so many different ways to overcome the global vs local variable problem (aka client-server where do I put the code/data problem)... Synthetics, deprecated, no longer supported, then findViewById/binding, now Jetpack Compose... what next?

  • @hanifmarwat421
    @hanifmarwat421 11 หลายเดือนก่อน

    Should we use only one viewModel in whole app or create different viewModels for different purposes?

    • @vibovitold
      @vibovitold 11 หลายเดือนก่อน +2

      Typically a ViewModel = 1 screen of your app.
      If you have multiple screens, you don't want to handle them all with a single ViewModel, because it makes your code unflexible, the ViewModel overly big, and violates single responsibility principle. It would also create lifescope problems (eg. imagine you have an email app, and there is a "general" view with a list of your emails, but also a "detail" view, where you navigate to read a specific email thread - now obviously the natural lifespan of the detailed screen is shorter than the lifespan of the main screen)

  • @h4rt360
    @h4rt360 11 หลายเดือนก่อน +1

    i don't understand why not to make UI actions update the model itself and vice versa.

    • @PhilippLackner
      @PhilippLackner  11 หลายเดือนก่อน +2

      To separate different jobs and give each part a single responsibility

  • @masti437
    @masti437 11 หลายเดือนก่อน

    This man is soon to become the God of native android apps 🙂 Amazing content and best in the world

  • @pyaesonehan19
    @pyaesonehan19 2 หลายเดือนก่อน

  • @RajaBabu-dh5un
    @RajaBabu-dh5un 3 หลายเดือนก่อน

    I think this is similar to React virtual dom 😮

  • @hijohn2073
    @hijohn2073 8 หลายเดือนก่อน

    Hi Philipp, could u share your theme settings plz?
    1. What's the name of theme?
    2. What's the name of fonts?
    Thanks ahead :)

  • @mubaraknative
    @mubaraknative 10 หลายเดือนก่อน

    waiting for 123K

  • @idrios
    @idrios ปีที่แล้ว +2

    This video is pretty much Android development in a nutshell.
    Part 1: The motivation behind MVVM; how it just totally simplifies the process of making changes on the UI, and keeping it synced with the data model that's being represented. Easy to implement, easy to understand, there's a good deal of boilerplate but it's easy to ignore.
    Part 2: There's a small Gotcha! When you rotate the device, the screen re-renders and your viewmodel gets destroyed & reinitialized. Not a problem though, Android gives you a solution for this, you just need your viewmodel to extend the androidx ViewModel class and it will persist the viewmodel's state during screen configuration changes for you.
    Part 3: So here's a common scenario where you're in a sub-component that doesn't know which activity is calling it. You'll need to do that in a specific Android way, but the android package for doing it isn't included by default so you'll need to update the gradle dependencies (that's the build.gradle (:app) one, not the other build.grade top-level file). Doing this (or maybe for reasons totally unrelated?) sometimes causes a "duplicate class" error message to appear that, thankfully someone has tracked as being an issue with the latest kotlin.android plugin (in build.gradle (:project)), so just downgrade to an older and more stable version of that; and for reasons only about 5 people understand you also need to update your composeOptions (build.gradle (:app)) to a newer version; and then your project builds again! But it's a hollow victory, because now you're left with this sense of unease and uncertainty over whether it will work as prescribed when you actually do try to implement it in a subcomponent instead of MainActivity; that maybe there's an edge case related to using this same component from different intents, or on different devices, or with different versions of Jetpack Compose or Android. Or that maybe this will break the project in the future; or that you'll be forced to continue using this older version of kotlin.android and miss out on future features. Your code works now, but the feeling of unease over your software will never leave now.
    And then also here's a common scenario where you might want to use constructor arguments for your Android-specific ViewModel that you are required to use. You'll need to create a whole ViewModel Factory from the ViewModelProvider and override the create method with your own way of creating ViewModels and then create the ViewModel using that; all that even if you only want one instance of your ViewModel.
    Some developers just put the entire Android project in a WebView.
    Anyway, you're a phenomenal teacher and this video explained things really well. Thank you for helping us navigate the eternally-changing landscape that is native Android development.

  • @soccymountain
    @soccymountain 9 หลายเดือนก่อน

    Ich habe gehört, dass Du ein Händchen dafür hast AndroidStudio super gut zu erklären. Aber warum auf englisch? Gibt’s da nicht schon jede Menge guter Video s? Ich deutsch dagegen sieht’s da schon viel schlimmer aus. Warum also nicht auf deutsch?? Die AutoÜbersetzung ist viel zu schnell und auch nicht immer genau.
    Vielen Dank fürs Verständnis.
    Andreas Blechschmidt

    • @PhilippLackner
      @PhilippLackner  9 หลายเดือนก่อน

      Weil ich in deutsch eben deutlich weniger Leute erreichen könnte in einer bereits kleinen Nische :)
      Viele andere größere aktive channels gibt's auf englisch auch nicht

  • @BelokonRoman
    @BelokonRoman 11 หลายเดือนก่อน

    Android's ViewModel is not a VM from MVVM. It's just a container which allow to survive configuration changes.
    Here is also what documentation stated: "The ViewModel class is a business logic or screen level state holder. " ... just a holder.
    I can implement MVP in my app and use ViewModel as a container for a Presenter in order to survive configuration changes.

  • @user-zb8mz6hc9v
    @user-zb8mz6hc9v 4 หลายเดือนก่อน +1

    bro sorry for interpart i really dont understand like view model and some many other so i want you suggestion .plz dont say life circle it only show me how is work i doent show what inside is do .plz i am lost

  • @andrewdunbar828
    @andrewdunbar828 9 หลายเดือนก่อน

    Was es aussieht Was es aussieht parAmeter parAmeter

  • @pickemparty
    @pickemparty 2 หลายเดือนก่อน

    Can MVVM be done with Java or must it be Kotlin!?