I read this guide about recommended app architecture for Android.
Here is a graphical summery:
The role of ViewModel is clear, but I don't understand why we need it if we use Repository. The purpose of ViewModel is to keep the data persistent during the Activity life cycle, but if the Repository anyway exists as long as the process exists, so what advantage is to use also ViewModel? I can make the Repository a singelton and retrieve it's instance directly from the Activity. That way I reduce complexity and achieve the same results.