AndroidViewModel забезпечує контекст програми
Якщо вам потрібно використовувати контекст у своїй Viewmodel, ви повинні використовувати AndroidViewModel (AVM), оскільки він містить контекст програми. Щоб отримати контекстний виклик getApplication()
, в іншому випадку використовуйте звичайний ViewModel (VM).
AndroidViewModel має контекст програми . Ми всі знаємо, що статичний екземпляр контексту - це зло, оскільки це може спричинити витік пам'яті !! Однак статичний екземпляр Application не такий вже й поганий, як ви могли б подумати, оскільки в запущеній програмі є лише один екземпляр Application.
Тому використання та наявність екземпляра Application у певному класі взагалі не є проблемою. Але, якщо екземпляр програми посилається на них, це проблема через проблему циклу опорного циклу.
Дивіться також про інстанцію програми
Проблема AndroidViewModel для одиничних тестів
AVM забезпечує контекст програми, який є проблематичним для тестування одиниць. Блок тестів не повинен стосуватися жодного з життєвих циклів Android, наприклад, контексту.