2011-12-23 7 views
5

He desarrollado una aplicación en Android 4.0.3 (Ice-cream Sandwich), estoy usando dos actividades para probar la actividad de navegación. Pero observé un comportamiento diferente en la navegación de Actividad.¿Es esta una nueva implementación en Android 4.0?

Llamo Actividad B de la Actividad A. En la Actividad B, estoy llamando al método finish(). Para que podamos ver la actividad anterior A. Está funcionando exactamente como se esperaba, pero el problema es la navegación hacia atrás (método de finalización de llamada o presionar tecla de retroceso), está llamando al método de Actividad A de onCreate() en lugar de llamar al onResume () Pero en versiones anteriores no se comporta así. ¿Es esta una nueva implementación en Android 4.0?

Aquí está el ejemplo de lo que he implementado:

Activity_A:

public class Activity_A extends Activity { 

    /** Called when the activity is first created. */ 
    static int count=0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 1 called:"+(++count)+" Times"); 
    } 

    public void onClick(View v) 
    { 
     Intent intent=new Intent(this,Activity2.class); 
     startActivityForResult(intent, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("onActivityResult", "Called with Code:"+resultCode); 
    } 

} 

Activity_B:

public class Activity_B extends Activity { 

     /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 2"); 
    } 

    public void onClick(View v) 
    { 
     setResult(1); 
     finish(); 
    } 
} 

por favor verifica y quiero saber si estoy haciendo ningún error.

Gracias, Ram.

+0

Pregunta: ¿onResume viene después deCreate? Creo que la Actividad A se eliminó de Android después de llamar a la Actividad B, algo que podría suceder en todas las plataformas de Android, supongo. –

Respuesta

1

Esto es de la documentación de la actividad Android (Link here):

  • Si una actividad en el primer plano de la pantalla (en la parte superior de la pila), que es activa o correr.
  • Si una actividad ha perdido el foco pero aún está visible (es decir, una nueva actividad no completa o transparente tiene el foco en la parte superior de su actividad), se pausa. Una actividad detenida está completamente viva (mantiene toda la información de estado y miembros y permanece unida al administrador de ventanas), pero puede ser eliminada por el sistema en situaciones de poca memoria.
  • Si una actividad está completamente oscurecida por otra actividad, se detiene. Todavía conserva toda la información de estado y miembros, sin embargo, ya no es visible para el usuario, por lo que su ventana está oculta y el sistema la eliminará a menudo cuando se necesite memoria en otro lugar.
  • Si una actividad está en pausa o detenida, el sistema puede eliminar la actividad de la memoria pidiéndole que termine o simplemente eliminando el proceso. Cuando se vuelve a mostrar al usuario, debe reiniciarse completamente y restaurarse a su estado anterior.

Quizás los puntos 3 y 4 le son relevantes.

+0

pero son solo dos actividades. Y más sobre esto es la primera aplicación de terceros en mi dispositivo (Samsung Nexus S) luego de actualizarla a la 4.0.3, entonces ¿cómo podría ser un problema de poca memoria? – ram

+0

Del diagrama de actividad: si su actividad oculta la actividad anterior, entonces la actividad se detiene. Si el sistema no necesita memoria, llama a Reestart, en lugar de a Reencender. Tal vez este es el origen de su programa? No han mencionado ningún cambio en el helado con respecto a ir a onCreate desde onStop, a menos que el sistema necesite memoria. – Davos555

+0

OK Muchas gracias por su información. – ram

7

¡Tengo el mismo problema! Vaya a Configuraciones/Desarrollo/y desmarque 'Destruir actividades'

+0

** Nota **: el teléfono debe reiniciarse para ver el efecto. – Deepak

+0

si abro la cámara para capturar la imagen en Android 4.03, invoqué el método de respuesta de actividad antes de capturar o cancelar la imagen, por lo que el código de resultado siempre será nulo y no podría manejar el evento de captura de imagen en el resultado de la actividad. ¿tengo alguna idea de por qué sucede esto? Estoy probando esto en htc me 4.03, aunque esto funciona en la versión i-tab intext 4.04. –

0

Y para mantener el estado de la actividad, use los métodos SavedInstanceState() y onRestoreInstanceSate().

0

Ver esta respuesta: https://stackoverflow.com/a/16147110/1306419. Cito desde allí:

Puede que tenga que declarar el modo de inicio de su actividad A (actividad principal) como: android:launchMode="singleTop" en su AndroidManifest.xml. si no lo hace, Android utiliza el modo de inicio estándar, que significa The system always creates a new instance of the activity in the target task. y se recrea la actividad (Android documentation).

Con singleTop el sistema vuelve a su actividad existente (con el extra original), si está en la parte superior de la pila posterior de la tarea.

Cuestiones relacionadas