public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getUsers().observer(this, new Observer() {
@Override
public void onChanged(@Nullable User data) {
// update the ui.
}
});
}
}
例如,如果我在上面創建這個活動并旋轉螢屏,我假設MyViewModel將被保留。但是當我完成活動并創建一個新活動時,我應該會看到一個帶有 new 的全新活動MyViewModel。
據我了解,配置更改將啟動相同的回呼(onPause,onStop,onDestroy然后onCreate,onStart,onResume),這似乎與用戶完成活動并再次手動創建它相同。
那么 ViewModelProviders 是如何確定哪個是哪個呢?
任何反饋表示贊賞!
uj5u.com熱心網友回復:
您可以在ComponentActivity 的源代碼中isChangingConfigurations()看到它在銷毀時檢查:
// listener registered in constructor
getLifecycle().addObserver(new LifecycleEventObserver() {
@Override
public void onStateChanged(@NonNull LifecycleOwner source,
@NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_DESTROY) {
// Clear out the available context
mContextAwareHelper.clearAvailableContext();
// And clear the ViewModelStore
if (!isChangingConfigurations()) {
getViewModelStore().clear();
}
}
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412239.html
標籤:
