Pregunta

Tengo 3 Actividades diferentes que usuario navega entre en ningún orden en particular. Mi objetivo es doble:

  1. Cuando el usuario cambia a otra cosa cuando se reanuda la aplicación Quiero empezar donde el usuario deja incluso si la aplicación se terminó
  2. Cuando se reanuda la última actividad Quiero restaurarla en el último estado consultados (éste creo que tengo una idea bastante buena de cómo achive)

Creo que el problema no es start / stop - donde yo más o menos lo que necesito, pero onCreate() Una vez terminado aplicación. En ese caso - que recoge la actividad que he configurado en el manifiesto. Supongo que puedo poner algo en el método onCreate() de esa actividad por defecto pero ¿hay una mejor manera de que estoy tal vez falta?

¿Fue útil?

Solución

Si su aplicación no se ha "terminado" y luego # 1 ya debería trabajar y # 2 sólo requiere guardar los valores que no son administrados automagicamente en el paquete de onSaveInstanceState () luego restaurarlos en la onRestoreInstanceState () .

Esto es una especie de truco, pero creo que su mejor opción para el # 1 en el caso de la aplicación de hecho ser terminado sería para salvar la actividad más reciente en el onResume de cada una de sus clases de actividad a continuación, cuando la primera carrera onCreate de su primera actividad de hacer una verificación a continuación, iniciar la actividad correcta ... tal vez incluso poner en una actividad en blanco al principio. Algo como esto:

startActivity:

public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

A continuación, en todas las demás actividades (MyActivity1,2,3) guardar los valores de este modo:

@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

Usted también tiene que manejar salvar / restaurar los datos de cada actividad manualmente. Se podría guardar todos los valores que necesita en las preferencias dentro del onPause () de cada una de las actividades luego restablecerlo en el onResume ().

Otros consejos

Tenga en cuenta que onSaveInstanceState () no es viable para el estado a largo plazo, es decir, los poderes de usuario del teléfono hacia abajo y luego la vuelve a encender en un punto indeterminado más tarde. Usted tendrá que crear su propio mecanismo de estado a largo plazo si así lo desea para su estado de sobrevivir ciclos de energía.

Creo que desea implementar onSaveInstanceState y que pueda almacenar sus actividades estado actual en un paquete. Ese paquete se transmitirá en su actividad en onCreate, y se puede utilizar para restablecer los valores.

http://developer.android.com/guide/topics/fundamentals .html # actstate

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top