Модель представления может быть тяжелой, если мы используем архитектуру, основанную на одной деятельности - PullRequest
1 голос
/ 05 апреля 2020

Поскольку Google предлагает приложение, основанное на одной активности У меня есть ситуация, когда мне нужно разъяснение.

У меня есть одно действие, содержащее 3 фрагмента, и каждый фрагмент связан с различными фрагментами, имеющими другие экраны.

  1. следует использовать только одна модель представления для каждой вкладки, или я должен использовать одну модель представления, имеющую разные экраны.

  2. Поскольку у меня есть только одно действие, и представление Модель находится до тех пор, пока действие не будет уничтожено. У всех viewModel, которые я создам для каждого экрана, будут данные, пока активность не будет уничтожена. Если это так, мое приложение станет тяжелым.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020
  1. должен ли я использовать только одну модель представления для каждой вкладки или одну модель представления с разными экранами.

Вы должны использовать наименьшую область действия для каждой ViewModel возможный. Как правило, это означает, что данные, связанные только с одним фрагментом, должны использовать ViewModel, связанный только с этим одним фрагментом.

Поскольку у меня есть только одно действие и просмотр, модель находится до тех пор, пока действие не будет уничтожено. У всех viewModel, которые я создам для каждого экрана, будут данные, пока активность не будет уничтожена. Если это так, это сделает мое приложение тяжелым.

ViewModels живут только до тех пор, пока существует ViewModelStore, к которому они прикреплены. Поэтому, если у вас есть ViewModel, связанная с фрагментом, он будет существовать только до тех пор, пока существует этот фрагмент. Например, если этот фрагмент выскочил из спины или вы вызываете remove(), то ViewModel уничтожается. ViewModels будут жить так же долго, как и ваша деятельность, если вы специально создадите их, используя операцию как ViewModelStoreOwner (например, используя ViewModelProvider(activity)).

1 голос
/ 05 апреля 2020
  1. Каждый фрагмент обычно должен иметь сам ViewModel, но в некоторых случаях, когда вы хотите использовать один и тот же экземпляр ViewModel, вы можете добиться этого с помощью ViewModel, ограниченной областью действия .

  2. Объекты ViewModel попадают в жизненный цикл, передаваемый ViewModelProvider при получении ViewModel , который находится в документах и вам, возможно, придется прочитать другие подробности, но технически вы можете применить ViewModel к фрагменту или к действию.

...