Недавно Google выпустили Android Architecture Components, в первой же строке описания сказано:
The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.
Вот пример моей ViewModel
MyViewModel.java
public class MyViewModel extends ViewModel {
private MutableLiveData<Boolean> refreshStatus = new MutableLiveData<>();
private MutableLiveData<ResponseHolder<List<MusicSong>>> response = new MutableLiveData<>();
public MyViewModel() {
Log.wtf(TAG, "MyViewModel() called = [" + hashCode() + "]");
//set default value
response.setValue(ResponseHolder.success(new ArrayList<>()));
}
}
После это получаю экзепмляр MyViewModel в Activity, а так же в Fragment который находится в этой Activity.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
}
При запуске я вижу как конструктор MyViewModel вызывается два раза, перый из Activity и второй из Fragment, вот логи:
MyViewModel() called with: hashCode = [79759198]
MyViewModel() called with: hashCode = [97210601]
И после поворота
MyViewModel() called with: hashCode = [60773597]
MyViewModel() called with: hashCode = [186413841]
Вопрос: так и должно быть что для каждой Activity создается новый экземпляр VideModel и если да, то как он тогда переживает поворот экрана, или я что то делаю не так, тогда что?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей