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. } } }
}
- Solución automática de laberinto
- Android verificar el estado WIFI (desconectado o el usuario ha cambiado WIFI) ¿Cómo FLAG?
- Establecer el efecto de ondulación en la vista de imagen
- Protocolos SSL / TLS y suites de cifrado con AndroidHttpClient
- Java.lang.NoClassDefFoundError mientras ejecuta la prueba JUnit en Netbeans
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.
- AndEngine - Kill Sprite después de X segundos?
- JAudioTagger Android - No se pudo encontrar la clase 'sun.nio.ch.DirectBuffer'
- Cómo hacer claro (vacío / sin valores) spinner on clearbutton
- Inyectar dependencias en singleton con Dagger?
- Limitar FPS en Libgdx juego con Thread.sleep () no funciona
- Error al iniciar Studio de Android
- Ningún constructor vacío al crear un servicio
- Singleton vs Intents (Android)
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:
-
¿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á.
-
¿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.
-
¿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.
-
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
- Cómo agregar la imagen dinámica con scrollview / listview horizontal
- Multi-Pane fragmentos dentro de viewpager