我应该使用哪种生命周期方法进行网络调用,以免在屏幕旋转时再次调用它?
Which lifecycle method should I place my network call so it doesn't get called again when the screen rotates?
我正在尝试通过在查询 API 后显示列表来学习 MVVM 架构。
我有点不确定我应该如何处理旋转我的设备的问题,因为一旦我旋转它,我的 onCreate
方法就会再次被调用,并且对 API 的第二个查询被调用。我应该在哪里放置我的网络调用,以便它在屏幕方向改变时不执行另一个查询?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
viewModel = new ViewModelProvider(this).get(PostViewModel.class);
adapter = new PostAdapter(viewModel.getListPosts());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
viewModel.getGetPostsLiveData().observe(this, listPosts -> {
Log.d(TAG, "onCreate: Called...");
adapter.notifyDataSetChanged();
});
viewModel.getPosts();
}
我的方法 viewModel.getPosts();
执行查询并在设备屏幕方向改变时再次调用。
根据这个回答:
onPause();
onSaveInstanceState();
onStop();
onDestroy();
onCreate();
onStart();
onResume();
这是屏幕方向更改的生命周期。对于这 3 种方法,onCreate, onStart, and onResume
它们在应用程序打开时被调用一次,并在每次屏幕更改时再次被调用。所以我不确定我应该在哪里发出网络呼叫请求。
如果是一次性调用,您可以从 ViewModel 中调用它。
init {
getPosts()
}
我正在尝试通过在查询 API 后显示列表来学习 MVVM 架构。
我有点不确定我应该如何处理旋转我的设备的问题,因为一旦我旋转它,我的 onCreate
方法就会再次被调用,并且对 API 的第二个查询被调用。我应该在哪里放置我的网络调用,以便它在屏幕方向改变时不执行另一个查询?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
viewModel = new ViewModelProvider(this).get(PostViewModel.class);
adapter = new PostAdapter(viewModel.getListPosts());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
viewModel.getGetPostsLiveData().observe(this, listPosts -> {
Log.d(TAG, "onCreate: Called...");
adapter.notifyDataSetChanged();
});
viewModel.getPosts();
}
我的方法 viewModel.getPosts();
执行查询并在设备屏幕方向改变时再次调用。
根据这个回答:
onPause();
onSaveInstanceState();
onStop();
onDestroy();
onCreate();
onStart();
onResume();
这是屏幕方向更改的生命周期。对于这 3 种方法,onCreate, onStart, and onResume
它们在应用程序打开时被调用一次,并在每次屏幕更改时再次被调用。所以我不确定我应该在哪里发出网络呼叫请求。
如果是一次性调用,您可以从 ViewModel 中调用它。
init {
getPosts()
}