¿Por qué Android utiliza Ints en vez de Enums?
Lectura sobre Android Puedo ver muchas partes del framework usando constantes int
para un valor de retorno, o valor de configuración ( como aquí en el START_REDELIVER_INTENT
), en lugar de un enum
, que hasta donde yo sé es una mejor opción por muchas razones que Se puede encontrar en toda la web, como este .
Así que esto me hace preguntarme … ¿por qué Google decidió utilizar tantos int's
lugar de enum's
?
- Cómo hacer que el movimiento de caída de nieve para un mapa de bits en Android
- Quitar fragmento de bloqueo
- Android: Ocultar ActionBar, mantener las pestañas
- ¿Por qué WiFiP2P necesita permiso de Internet?
- Cómo encontrar métodos overridable en eclipse
- Utilizar FragmentStatePagerAdapter sin biblioteca de soporte
- Extraño error "java.io.IOException: EOF" en Android
- Funcionamiento de la colada en diversos niveles al tirar abajo
- Android 4.3 Bluetooth ble no se llama onCharacteristicRead ()
- ¿Cómo evitar la adición de método de inyección para cada vista?
- Establecer la fecha / hora de Android mediante programación
- Recursos de Android: ¿Cómo se cargan los mapas de bits de los recursos manejados en cuanto a memoria?
- Obtener las líneas de GL10 dibujo de imágenes junto a la otra, la solución?
Tirado directamente de los documentos
Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.
http://developer.android.com/training/articles/memory.html#Overhead
Editar:
También una diapositiva de una de las conversaciones de Guy Romano
Las operaciones en int ocurren muchas veces más rápido que las operaciones en enum.
Juzga por ti mismo. Cada vez que crea un enum que cree como mínimo:
1) Class-loader for it. 2) You keep this object in memory. 3) Since enum is static anonymous class - it will always hang in your memory (sometimes even after you close the application.)
Con respecto al Service
. En esta clase, las banderas se utilizan principalmente para comparaciones y devolver el resultado a la clase anterior ( ContextWrapper
). Pero, básicamente, si usted cavar en las entrañas de Android SDK usted descubrirá por sí mismo que casi todas estas banderas se utilizan para las operaciones de turno bynary .
Incluso en Java utilizar un cambio binario operaciones en JDK:
/** * Max capacity for a HashMap. Must be a power of two >= MINIMUM_CAPACITY. */ private static final int MAXIMUM_CAPACITY = 1 << 30;
También puedes consultar la clase Window en Android SDK
/** * Set the container for this window. If not set, the DecorWindow * operates as a top-level window; otherwise, it negotiates with the * container to display itself appropriately. * * @param container The desired containing Window. */ public void setContainer(Window container) { mContainer = container; if (container != null) { // Embedded screens never have a title. mFeatures |= 1<<FEATURE_NO_TITLE; mLocalFeatures |= 1<<FEATURE_NO_TITLE; container.mHasChildren = true; } } /** The default features enabled */ @SuppressWarnings({"PointlessBitwiseExpression"}) protected static final int DEFAULT_FEATURES = (1 << FEATURE_OPTIONS_PANEL) | (1 << FEATURE_CONTEXT_MENU);
Así que las razones son dos (al menos):
-
Menor consumo de memoria.
-
Trabajar más rápido debido a las operaciones a bit.
- Android: Diseño de uno-a-muchos de SQLite
- Cómo hacer referencia a un archivo en carpeta sin procesar en Android