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


¿Cómo varía el tamaño de la instalación de la aplicación en el teléfono?

Hice recientemente esta aplicación para los usuarios de la raíz que modifican su dispositivo con frecuencia.

Ahora noté un comportamiento bastante extraño con el tamaño de instalación de la aplicación.

  • ¿Es posible activar el menú compartido en smartphones (a través de HTML / JS)?
  • Android - NullPointerException en SearchView en la barra de acciones
  • Android - ¿Cómo puedo establecer dinámicamente el nombre del paquete en el momento de la creación de un proyecto Open-source?
  • Android Crea una acción personalizada SearchView Search
  • ¿Puedo escalar una vista en Android?
  • Cómo obtener elementos seleccionados de la vista de lista de selección múltiple
  • Cuando utilicé una actividad regular con las vistas que eran inicializadas del archivo de XML, el tamaño era 715 kb .

      @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.main_layout); executeEvents = new ExecuteEvents(this); display = (TextView) findViewById(R.id.display); powermenu = (Button) findViewById(R.id.powermenu); turnoffscreen = (Button) findViewById(R.id.turnscreenoff); mapButton = (ImageButton) findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getResources().getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); } 

    Después de cambiar a un diálogo que se creó la configuración de una vista que contenía los widgets en el archivo XML. El tamaño de la aplicación era ahora de 200kb .

     @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); //setContentView(R.layout.main_layout); LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.main_layout, null); executeEvents = new ExecuteEvents(this); display = (TextView) view.findViewById(R.id.display); powermenu = (Button) view.findViewById(R.id.powermenu); turnoffscreen = (Button) view.findViewById(R.id.turnscreenoff); mapButton = (ImageButton) view.findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getResources().getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); Dialog dialog = new Dialog(this); dialog.setContentView(view); dialog.setTitle(getResources().getString(R.string.app_name)); dialog.show(); } 

    Se redujo a 80kb cuando utilicé esto:

     @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); dialog = new Dialog(this); dialog.setContentView(R.layout.main_layout); executeEvents = new ExecuteEvents(this); display = (TextView) dialog.findViewById(R.id.display); powermenu = (Button) dialog.findViewById(R.id.powermenu); turnoffscreen = (Button) dialog.findViewById(R.id.turnscreenoff); mapButton = (ImageButton) dialog.findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); dialog.setTitle(getString(R.string.app_name)); dialog.show(); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialogInterface) { dialog.dismiss(); MainActivity.this.finish(); } }); } 

    También noté otro cambio extraño en el tamaño de la aplicación cuando intenté agregar una animación con el último estilo de código (el 80kb ). El tamaño de la aplicación se convirtió en un fuerte 1 MB . Así es como inicialicé la animación y traté de llamarla cuando se hizo clic en el botón:

     private static final ScaleAnimation animation = new ScaleAnimation(1, .95f, 1, .95f, Animation.RELATIVE_TO_SELF, (float)0.5, Animation.RELATIVE_TO_SELF, (float)0.5);//declared as global variable 

    Dentro del método onCreate:

     animation.setDuration(1000); animation.setFillAfter(false); 

    Después de lo cual lo llamé en el onClickListener :

     mapButton.startAnimation(animation); 

    ¿Por qué hay un cambio tan drástico en el tamaño de la aplicación cuando no he añadido ningún nuevo recurso, sino que solo cambió el estilo del código? ¿Dónde hay tal gran diferencia en la forma en que inicializar widgets presentes en los diálogos? ¿Por qué hay una diferencia enorme cuando agrego una animación de la manera que lo he añadido?

    Siguiente pregunta:

      @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.main_layout); executeEvents = new ExecuteEvents(this); display = (TextView) this.findViewById(R.id.display); powermenu = (Button) this.findViewById(R.id.powermenu); turnoffscreen = (Button) this.findViewById(R.id.turnscreenoff); mapButton = (ImageButton) this.findViewById(R.id.mapButton); SP = getSharedPreferences(PBConstants.Power_Button_SP, MODE_MULTI_PROCESS); if(SP.contains(PBConstants.INPUT_DEVICE_TAG)) display.setText(getResources().getString(R.string.configured)); mapButton.setOnClickListener(this); powermenu.setOnClickListener(this); turnoffscreen.setOnClickListener(this); } 

    ESPECULACIÓN

    ¿Podría esto ser debido a los paquetes o clases que se importan? Tiene sentido para el bit de animation de la pregunta al menos.

    ¿Agregar el contexto al que se inicializan las vistas reduce el uso de memoria?

  • Android: Tamaño de imagen de fondo (en píxeles) que admiten todos los dispositivos
  • ¿Puedo evitar el reproductor de vídeo en pantalla completa nativo con HTML5 en iPhone o Android?
  • Modo de espera / espera de Android
  • Cómo establecer el relleno entre las páginas de ViewPager mientras se mantiene la página de ancho completo
  • Cómo utilizar el centro de una vista como un punto de referencia dentro de un RelativeLayout
  • GridView con diferentes tamaños de celdas, estilo pinterest
  • One Solution collect form web for “¿Cómo varía el tamaño de la instalación de la aplicación en el teléfono?”

    Yup, sus especulaciones están cerca de estar en lo cierto, por lo que puede saber todo su código Java primero se compila a Java bytecode por decir javac , a continuación, dx convierte en bytecode Dalvik, su dalvik bytecode archivo (aka dex ) se empaqueta dentro de su apk (El tamaño de apk de btw no varía mucho como ayuda de la compresión del cierre relámpago) generalmente como classes.dex que más adelante cuando usted instala el apk en usted dispositivo, Android pudo optimizarlo para ese dispositivo particular (aka odex ).

    Por lo tanto, para comprobar que su final en caché dex realmente cambia y es el responsable de este cambio de tamaño, por decir simplemente añadir animaciones, se puede encontrar descomprimiendo su apk o dentro de su dispositivo, siempre encuentro la segunda opción más emocionante:

    Así que aquí está su dex sin animación (su 80kb ):

    Http://i.imgur.com/2JkpWS3.png

    Y tu información de la aplicación:

    Http://i.imgur.com/HseGJih.png

    Así que aquí está su dex con la animación (su 1 MB ):

    Http://i.imgur.com/pyrthYd.png

    Y tu información de la aplicación:

    Http://i.imgur.com/FSVPWAC.png

    Una mirada más cercana usted puede encontrar que son verdaderamente diferentes apenas mirando derecho en su piscina constante de los bytecode del dalvik:

    Http://i.imgur.com/02mqaif.png

    Por alguna razón no conseguí tal diferencia radical del tamaño pero es noticiable, construí tu app usando gradle + Android Studio así que pienso que ayudan y optimizan cosas un pedacito.

    Por último, podría utilizar ProGuard pero ¡eh! Algunos k no son que mucho en estos días, no me preocuparía por añadir algo de "grasa" a su aplicación, siempre y cuando lo hace mejor, por supuesto, siempre hay espacio para la mejora, pero recuerde que no está en un java4k o cosas como eso 🙂

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