Clase interna de diseños en Android

Probablemente esta es una pregunta realmente estúpida pero he creado una estructura como esta y realmente tengo problemas con el rendimiento.

public class OuterClass extends LinearLayout { private LinearLayout viewPort; public OuterClass(Context context) { super(context); initComponents(context); addInnerClass(); } private void initComponents(Context context){ LayoutInflater inflater = (LayoutInflater) getContext(). getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.view_port, this); viewPort = (LinearLayout) findViewById(R.id.view_port); } private void addInnerClass(){ for ( int i = 0; i < k; i++ ){ InnerClass functio = this.new InnerClass(); viewPort.addView(functio); } } private class InnerClass extends RelativeLayout{ private LineraLayout newLines; public InnerClass() { super(OuterClass.this.context); initComponents(OuterClass.this.context); addNLines(); } private void initComponents(Context context){ LayoutInflater inflater = (LayoutInflater) getContext(). getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.job_function_container, this); newLines = (LinearLayout) findViewById(R.id.newLines); } private void addInnerOfInner(View view){ newLines.addView(view); } private void addNLines(){ for ( int i = 0; i < k1; i++ ){ InnerOfInnerClass line = this.new InnerOfInnerClass(); addInnerOfInner(line); } } public class InnerOfInnerClass extends RelativeLayout{ private InnerOfInnerClass(){ super(OuterClass.this.context); initComponents(OuterClass.this.context); } private void initComponents(Context context){ LayoutInflater inflater = (LayoutInflater) getContext(). getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.new_line, this); // Setting some fields. } } } 

}

Para ser más spesific es realmente lento si voy a tratar de crear 5 objetos InnerClass y 5 de InnerOfInner objetos de la clase en cada InnerClass. Estaría muy agradecido si alguien me explicara por qué. Gracias.

No parece haber nada que se destaca de su código como una enorme bandera roja. En cuanto a por qué es muy lento en la parte de la creación podría ser por una variedad de razones. Cosas para considerar:

  1. ¿Cómo se está instanciando OuterClass de la actividad? Sólo se llama una vez o se crean varias instancias. Cuanto más tengas más lento será.

  2. ¿Cuántos otros widgets hay en R.layout.new_line, R.layout.job_function_container, R.layout.view_port? Tener sólo un widget vs 50 en cada uno puede causar algunos retrasos notables.

  3. ¿Con qué dispositivo está probando? Correr en un viejo Droid será significativamente más lento que las pruebas en un Nexus 7. Si su uso de un emulador … bueno, siempre esperan que todo funcione lento.

  4. Finalmente (y probablemente la más pertinente), creo que la mayor ralentización es la complejidad o la profundidad de los diseños de anidación. Como Ancantus mencionó, trate de evitar capas de diseño profundo. Ir demasiado profundo, y las cosas raras pueden comenzar a suceder. Principalmente debido a la cantidad de memoria que estas jerarquías consumen.

Si necesita un medio dinámico de agregar vistas, sugeriría que busque en un ListView, GridView o incluso un GridLayout si su plataforma de destino lo permite. En la parte superior de mi cabeza, no puedo pensar en por qué se requiere un diseño tan complejo. Aunque hay necesidades de casos especiales, por lo general siempre hay una manera más fácil y más correcta.

Aquí hay algunos enlaces útiles sobre Optimización de diseño que pueden o no ser útiles para usted:

  • Truco de diseño 1
  • Truco de diseño 2
  • Truco de diseño 3
  • Truco de diseño 4
  • JSON a java utilizando gson
  • Error "no se pudo obtener el modelo de tipo 'BasicIdeaProject' utilizando Gradle distribución" en Windows?
  • Diferentes fling (swipe) de velocidad en diferentes dispositivos Android con la misma densidad
  • Agregar objeto a ArrayList en índice especificado
  • ¿El editor de diseño de Android Studio muestra propiedades de vista personalizada?
  • Reemplazar ciertas palabras en una oración
  • ¿Cómo se detiene un hilo sin un método stop ()?
  • ¿Cómo obtener el nombre del modelo de la CPU de Android?
  • Androide. Iniciar aplicación desde Dialer
  • ¿Dónde deberíamos invocar setPin () para el emparejamiento de bluetooth en android?
  • ¿Cómo separar fragmentos a diferentes archivos en android studio?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.