2010-08-03 6 views
30

? Si una actividad es un singleton en la práctica, creo que puedo ganar un poco de eficacia declarando los miembros "estáticos" sin riesgo. ¿Sí?¿Puedo obtener un poco de eficiencia declarando a los miembros apropiados como "estáticos" en la actividad de Android

+2

P.S> Obtuve 1000 puntos de identificación de identificación con esta pregunta ... si le resulta útil, apoye el proceso SO marcando la pregunta: haga clic en la flecha ARRIBA. Gracias – DJC

+0

La actividad (en general) no es un singleton. –

Respuesta

18

El Android documentation says -

nunca hay más de una instancia de un "singleTask" o "SingleInstance" actividad, por lo que se espera que esa instancia para manejar todos los nuevos intentos.

Esto significa puede usar los miembros estáticos.

Además, un standard o singleTop debería tener sólomiembros estáticos compatibles con el proceso. Supongamos que la pila de actividad actual es A-B-C-D. Si el intento de llegar es para una actividad de tipo B que está en el modo "estándar" o "modo SingleTop". Una nueva instancia de B se lanzaría como (ya que B no está en la parte superior de la pila), por lo que la pila resultante sería A-B-C-D-B.

+0

Tyvm Ankit! Esto lo hará por mí .. – DJC

+0

interesante - Siempre me pregunté por qué el estado de compartir a través de campos estáticos no funciona, a veces un campo de repente se vuelve nulo. No declaro que estos campos sean volátiles, ¿es esa la razón? ¿Pero por qué? Pensé que solo hay un único hilo de UI. – Matthias

+0

@Matthias: Tal vez Android podría usar un nuevo proceso para iniciar la misma actividad. http://android-developers.blogspot.dk/2010/04/multitasking-android-way.html – hB0

1

No. El mismo Activity se puede iniciar varias veces en el mismo proceso. Por ejemplo, puede intentar iniciar Activity consigo mismo, al hacer clic en un botón.

+1

puede declarar la propiedad de la actividad en manifest como singleInstance/singleTop/singleTask para garantizar solo una instancia. – ankitjaininfo

0

Sí, una actividad puede ser un "singleton" si se asegura de que no se inicia una instancia de la actividad A mientras hay otra instancia de la actividad A en la pila de actividades (una instancia de la actividad A podría iniciar técnicamente otra instancia de sí mismo).

+3

Eso es básicamente decir que 'Activity' es un singleton si se asegura de que sea uno. Eso no lo convierte en un singleton. – Felix

+1

Eso es cierto, pero la pregunta final es si puede ser un singleton en la práctica, que puede ser.Por lo tanto, con toda la practicidad, los miembros estáticos se pueden usar de forma segura si el desarrollador mantiene un máximo de 1 instancia, incluso sin un patrón de diseño único. (Personalmente prefiero practicidad sobre tecnicismo, pero nuestras dos respuestas son válidas :)) –

+0

Gracias Felix y Andy ... parece que Ankit tiene este :) – DJC

3

Una cosa por favor NO use singleTask o singleInstance para este propósito. Los indicadores de inicio de actividades están ahí para controlar cómo se comportan las pilas de actividades. Tienen un impacto visible en la interacción del usuario con su actividad (por lo que no es estándar). Esos modos están destinados a ser utilizados cuando desea ese tipo de interacción del usuario, NO deben utilizarse para cambiar los detalles de implementación de su aplicación.

+0

Por lo tanto, las actividades NO deben usar miembros estáticos, excepto en los casos en que sean apropiados en operaciones de varias instancias ... I ' Tenía la esperanza de que "la interacción del usuario" me fuera aclarada por la documentación de Android (el post de la ref. de Ankit está arriba) pero parece que soy un poco grueso ... supongo que publicaré una nueva pregunta. – DJC

+0

no lo obtuve, ¿entonces usar estática sería mucho mejor? porque estoy teniendo un problema con el constructor privado – Mikey

0

Consulte activity property launchMode at android.developer page. .

Cita: "estándar es el modo por defecto y es apropiado para la mayoría de los tipos de actividades SingleTop es también un modo de ejecución común y útil para muchos tipos de actividades Los otros modos -. singleTask y SingleInstance - no son apropiados para la mayoría de aplicaciones, ya que dan lugar a un modelo de interacción que es probable que sea desconocido para usuarios y es muy diferente de la mayoría de las otras aplicaciones ".

Cuestiones relacionadas