Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Objeto de interfaz de usuario creado a través de XML no se está barajando en Android Marshmallow

Estoy trabajando en portar android marshmallow para algunos hardware. El problema que enfrento es, si creo un objeto de interfaz de usuario a través de xml, no está siendo sweeped por GC. Por ejemplo:

He creado una aplicación para comprobar esto. Esta aplicación tiene 2 actividades. Cada actividad tiene un botón. Si presiono este botón, termina la actividad actual e inicia otra actividad.

  • ¿Cuál es la diferencia entre ActivityCompat y ContextCompat?
  • Android Beam: inicia la aplicación con registro de tipo MIME
  • UIL no admite esquema (protocolo) por defecto Debe implementar este soporte usted mismo
  • ¿Cómo puede la aplicación de configuración iniciar la actividad no exportada de una aplicación?
  • Expanda TextView con wrap_content hasta que la vista de vecino llegue al final del padre
  • ¿Existe alguna base de datos de información que enumera todos los dispositivos y especificaciones móviles?
  • Si defino un botón en la disposición del xml y en la actividad setcontentview, creará un objeto del botón del tipo. Ahora estoy conmutando estas actividades una y otra vez para crear objetos múltiples del botón, puesto que no estoy utilizando cualquier LAUNCH_MODE (intencionalmente).

    Ahora vamos a decir que 8 objetos de Button han sido creados. Volví a pulsar el botón varias veces y llegó a la pantalla de inicio. Inicie GC desde Android Studio. Después de que si tomo Heap Dump, todavía encuentro 8 instancias de Button pero "ids de objetos se cambian". Por otra parte, vi que el constructor de la clase Button no se llamaba después de iniciar GC.

    Entonces, ¿quién creó estos objetos? Y si estos son los mismos objetos, por qué se ha cambiado ids.

    Lo mismo si lo hago creando un objeto Button usando la clase Button java,

    Como Botón b = nuevo Botón (Contexto c);

    Los objetos están siendo barridos.

    Ponga por favor un poco de luz si usted entiende el problema.

    BR, Rahul

  • Cómo reemplazar el método a través del atajo de teclado en Android Studio
  • Deshabilitar el botón al hacer clic
  • Integrar mi aplicación con el contacto
  • Ventana de superposición del sistema Android
  • ¿Cómo puedo comprobar si el sistema es de 12 o 24 horas?
  • Acceso a la identificación de la cuenta de Google / nombre de usuario mediante Android
  • 2 Solutions collect form web for “Objeto de interfaz de usuario creado a través de XML no se está barajando en Android Marshmallow”

    No ha proporcionado ningún ejemplo de código para lo que está hablando. Sólo puedo adivinar que en realidad está creando estos objetos Button como mencionó,

    Button b = new Button(this); 

    Si estás haciendo referencia a un widget de botón en XML, entonces no deberías estar creando ningún objeto Button, solo deberías instanciar el objeto.

    Botón creado en XML

     <Button android:id="@+id/btn_action" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

    Instanciar el botón en el código

     Button btnAction = (Button) findViewById(R.id.btn_action); 

    Este objeto de botón no debe tener varias referencias de id. Cuando asigna un identificador a este widget en XML, el ID de referencia se agrega inmediatamente a su archivo R.java. Compruebe su archivo de R.java usted verá algo como

     public static final int btn_action=0x7f0d033b; 

    Este es un valor final, no se puede cambiar. Así que cada vez que hace referencia al objeto, btnAction, está haciendo referencia a 0x7f0d033b. La destrucción de tu actividad destruirá este objeto a menos que estés haciendo algo extraño como crear objetos estáticos.

    También tenga en cuenta que no hay garantía de que GC se llamará inmediatamente después de una actividad se destruye. Se llama sobre todo cuando es necesario. Si desea ayudar a "obligar" GC a ser llamado cuando una actividad es destruida, entonces limpiar en onDestroy () de la actividad. ¡Aclamaciones!

     @Override protected void onDestroy() { // invoke garbage collector System.gc(); } 

    También tenga en cuenta que llamar a System.gc () no significa necesariamente que se llamará Garbage Collector. La definición para esto es

    Indica a la VM que sería un buen momento para ejecutar el recolector de basura. Tenga en cuenta que esto es sólo una pista. No hay ninguna garantía de que el recolector de basura se ejecutará realmente.

    No hay necesidad de un nuevo botón, el botón ya está definido en el manifiesto, sólo con findViewById para buscarlo.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.