La gestión de la memoria es un aspecto crucial del desarrollo de aplicaciones. Dado que los dispositivos móviles tienen una memoria muy limitada, es necesario usarla con cuidado en nuestras aplicaciones. Una de las mejores prácticas involucradas en hacerlo es “ ver reciclaje ”.
Este artículo trata sobre el reciclaje de vistas en Android y luego se crea una aplicación simple que implementa la práctica del reciclaje de vistas usando ListView y ArrayAdapter en conjunto.
Necesidad de reciclaje de vistas en Android
Es una práctica usar la menor cantidad de memoria posible al reciclar las vistas no utilizadas para mostrar contenido nuevo en lugar de crear nuevas vistas para el mismo. Supongamos que nos estamos desplazando hacia abajo a través de una lista de mil palabras. Si creamos un TextView para cada palabra, necesitaríamos mil TextViews para esto. Esto desperdiciaría mucha memoria ya que la pantalla de nuestro dispositivo muestra solo 7-8 TextViews a la vez y necesitamos desplazarnos hacia abajo si queremos ver el resto.
Cuando nos desplazamos hacia abajo, las vistas de texto que están en la parte superior ya no están visibles. Por lo tanto, se puede inferir que el usuario no utiliza los TextView superiores cuando se desplaza hacia abajo en ListView. Por lo tanto, los TextViews no utilizados se reciclan y se utilizan en la parte inferior cuando el usuario se desplaza hacia abajo. De esta manera, en lugar de tener mil TextViews , nuestra tarea se puede lograr con solo algunos de ellos.
Ejemplo de View Recycling en Android
Uno de los ejemplos más habituales es la agenda de nuestro móvil. Podemos tener muchos contactos en nuestro teléfono, pero en lugar de crear nuevas vistas de texto para cada contacto, nuestro teléfono simplemente recicla las vistas desplazadas hacia arriba/abajo no utilizadas y las llena con la nueva información de contacto y la muestra nuevamente cuando el usuario se desplaza hacia arriba/abajo.
Implementación de View Recycling usando ArrayAdapter y Listview
- ArrayAdapter es una clase pública de Java que se extiende desde la clase BaseAdapter . Un objeto ArrayAdapter hace que los datos (que se van a mostrar) se adapten a una array. Básicamente, el adaptador es un puente entre el componente de la interfaz de usuario y los datos que ayuda a completar los datos en el componente de la interfaz de usuario.
- ListView es una clase pública de Java que se extiende desde AbsListView . ListView es una vista que agrupa varios elementos y los muestra en una lista vertical. Esta lista también se puede desplazar automáticamente si la cantidad de datos proporcionados no se puede acomodar en la pantalla.
- ArrayAdapter y ListView son necesarios para el reciclaje de vistas. ListView solicita vistas de ArrayAdpapter enviándole una solicitud y una posición específica. Luego, ArrayAdpapter devuelve la vista en la posición especificada, ya que ListView continúa solicitándola hasta que se llena la pantalla del dispositivo. Ahora, cuando el usuario se desplaza hacia abajo, ListView le da a ArrayAdpapter las vistas principales que ya no se muestran en la pantalla del dispositivo. El ArrayAdpapter luego borra los datos anteriores de ese ScrapView y establece nuevos datos y los devuelve a ListView en lugar de crear una nueva vista.
A continuación se muestra una aplicación sencilla para demostrar esta práctica de gestión de la memoria.
- Paso 1: agregue el siguiente código en el archivo activity_main.xml que solo contendría un ListView y un TextView .
actividad_principal.xml
<
LinearLayout
android:layout_height
=
"match_parent"
android:layout_width
=
"match_parent"
android:orientation
=
"vertical"
android:background
=
"#66bb6a"
android:padding
=
"8dp"
>
<
TextView
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:text
=
"Stuff you can learn at GeeksforGeeks:"
android:background
=
"#a5d6a7"
android:textSize
=
"22sp"
android:fontFamily
=
"sans-serif-condensed-light"
android:textColor
=
"#fafafa"
/>
<
ListView
android:id
=
"@+id/list"
android:orientation
=
"vertical"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
/>
</
LinearLayout
>
Producción:
- Paso 2: en el siguiente código, cuando inicializamos el ArrayAdapter , pasamos un diseño llamado android.R.layout.simple_list_item_1 junto con nuestro ArrayList y Context . Android.R.layout.simple_list_item_1 es un diseño incorporado que describe el diseño en el que se mostrará un solo elemento de la lista. Convencionalmente consiste en un solo TextView.
Una vez que se inicializan ListView y ArrayAdapter, configure ArrayAdapter en ListView usando el método setAdapter() .MainActivity.java
package
com.example.gfgrecycleview;
import
androidx.appcompat.app.AppCompatActivity;
import
android.os.Bundle;
import
android.widget.ArrayAdapter;
import
android.widget.ListView;
import
java.util.ArrayList;
public
class
MainActivity
extends
AppCompatActivity {
public
static
final
String LOG_TAG
= MainActivity.
class
.getName();
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create a list of study fields.
ArrayList<String> stuff =
new
ArrayList<>();
stuff.add(
"Data Structures"
);
stuff.add(
"Algorithms"
);
stuff.add(
"Competitive Programming"
);
stuff.add(
"Interview Questions"
);
stuff.add(
"Python"
);
stuff.add(
"Java"
);
stuff.add(
"Designing"
);
stuff.add(
"Coding"
);
stuff.add(
"Developing"
);
stuff.add(
"Project Ideas"
);
stuff.add(
"C++"
);
stuff.add(
"Basically Everything!"
);
// Find a reference to the
//{@link ListView} in the layout
ListView itemListView
= (ListView)findViewById(R.id.list);
// Create a new {@link ArrayAdapter}
// of study fields
ArrayAdapter<String> adapter
=
new
ArrayAdapter<String>(
this
,
android.R.layout.simple_list_item_1,
stuff);
// Set the adapter
// on the {@link ListView}
// so the list can be populated
/// in the user interface
itemListView.setAdapter(adapter);
}
}
Producción:
Publicación traducida automáticamente
Artículo escrito por agarwalkeshav8399 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA