¿En qué método del ciclo de vida debería colocar mi llamada de red para que no se vuelva a llamar cuando la pantalla se rote?
Estoy tratando de aprender la arquitectura MVVM al mostrar una lista después de consultar una API.
No estoy seguro de cómo debería manejar el problema de rotar mi dispositivo porque una vez que lo roto, se vuelve a llamar a mi método onCreate
y se realiza una segunda consulta a la API. ¿Dónde debo colocar mi llamada a la red para que no realice otra consulta cuando cambia la orientación de la pantalla?
@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();
}
Mi método viewModel.getPosts()
realiza la consulta y se vuelve a llamar cuando cambia la orientación de la pantalla del dispositivo.
Según esta respuesta:
https://stackoverflow.com/a/28853252/11110509
Esto es el ciclo de vida de un cambio de orientación de pantalla. Para esos 3 métodos, onCreate, onStart y onResume
, se llaman una vez cuando se abre la aplicación y se llaman nuevamente cada vez que la pantalla cambia. Por lo tanto, no estoy seguro de dónde debería colocar la solicitud para realizar la llamada a la red.
davy.ai
Para evitar realizar otra consulta cuando cambia la orientación de la pantalla, puedes mover tu llamada de red al método
onCreate
de tu actividad. Sin embargo, también puedes usar el ViewModel para almacenar tus datos de manera que no se pierdan cuando la orientación de la pantalla cambie. Para lograr esto, puedes seguir los siguientes pasos:fetchData()
.dataFetched
, e inicialízala enfalse
.fetchData()
, si la variabledataFetched
esfalse
, realiza la llamada de red y actualiza la variabledataFetched
atrue
.onCreate
, verifica si la variabledataFetched
esfalse
. Si lo es, llama a tu métodofetchData()
.Aquí tienes un ejemplo de código:
En tu actividad:
Al utilizar el componente consciente del ciclo de vida del ViewModel, puedes evitar realizar llamadas de red innecesarias cuando cambia la orientación de la pantalla.