Pergunta

Eu tenho 3 diferentes atividades que navega usuário entre em nenhuma ordem particular. Meu objetivo lo duplo:

  1. Quando o usuário muda para outra coisa quando o aplicativo é retomado quero começar onde o usuário deixou mesmo se o aplicativo foi encerrado
  2. Quando última atividade é retomado quero restaurá-lo para o último estado visto (esta eu acho que tenho uma boa idéia bastante sobre como achive)

Eu acho que o problema não é start / stop - onde eu praticamente se o que eu preciso, mas onCreate() se o aplicativo foi encerrado. Nesse caso - ele pega Atividade que eu configurado no manifesto. Acho que posso colocar algo no método onCreate() de que a atividade padrão, mas há uma maneira melhor que eu estou talvez faltando?

Foi útil?

Solução

Se o seu aplicativo não foi "terminada", em seguida, # 1 já deve trabalho e nº 2 requer apenas guardar quaisquer valores que não são gerenciados automagicamente para o Bundle em onSaveInstanceState () em seguida, restaurá-los em onRestoreInstanceState () .

Este é tipo de um truque, mas eu acho que a melhor opção para o # 1 no caso do aplicativo realmente sendo encerrado seria para salvar a atividade mais recente no onResume de cada uma das suas classes de atividade, em seguida, quando você primeira execução o onCreate de sua primeira atividade fazer uma verificação, em seguida, iniciar a atividade correta ... talvez até mesmo colocar em uma atividade em branco no início. Algo parecido com isto:

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();
    }
}

Então, em todas as outras atividades (MyActivity1,2,3) Guardar os valores assim:

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

    super.onResume();
}

Você também terá que lidar com salvar / restaurar os dados para cada atividade manualmente. Você poderia salvar todos os valores que você precisa para as preferências dentro do onPause () de cada uma das atividades, em seguida, restaurá-lo no onResume ().

Outras dicas

Tenha em mente que onSaveInstanceState () não é viável para o estado de longo prazo, ou seja, o usuário poderes o telefone e, em seguida, transforma-lo novamente em um ponto indeterminado depois. Você vai precisar para criar o seu próprio mecanismo de Estado de longo prazo se você deseja para o seu estado de sobreviver ciclos de energia.

Eu acredito que você deseja implementar onSaveInstanceState e que irá armazenar suas atividades estado atual em um pacote. Esse pacote será passado em sua atividade no onCreate, e você pode usá-lo para repor os seus valores.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top