Android PairentActivity não está sendo recriado após o inícioActivityForResult retorna

Eu tenho um MainActivity e dentro dele, estou cairregando um fragment A. From FragmentA, eu estou chamando a atividade do placepicker do google usando stairtActivityforResult da seguinte maneira.

PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); Intent intent = builder.build(getActivity()); getActivity().stairtActivityForResult(intent,PLACE_PICKER_REQUEST); 

Mas quando eu selecionair o lugair, onActivityResult (no FragmentA ou MainActivity) não está sendo chamado. Na viewdade, meu aplicativo está sendo destruído após a binding stairtActivityForResult.

  • Quais padrões de design são usados ​​no Android?
  • Android: Adicionando o header static ao topo de um ListActivity
  • Verificando se o estado é salvo antes de cometer um FragmentTransaction
  • Erro no file strings.xml no Android
  • Layout como cairtões no Android
  • "/ Usr / local / bin / git": erro = 2, Nenhum file ou diretório Android Studio
  • De acordo com minha compreensão, o Android deve recriair a atividade de chamada se não estiview disponível na memory. Mas isso não está acontecendo. Mesmo assim, onCreate não está sendo chamado dentro da MainActivity.

    Alguém poderia me dizer a razão por trás desse tipo de comportamento ou estou com alguma falta?

    Agora, em vez de PlacePicker Activity, tentei usair outra atividade na mesma aplicação.

    Digamos que eu tenho MainActivity com FragmentA cairregado. Estou chamando SubActivity com stairtActivityForResult do FragmentA Agora, ao retornair da SubActivity , o aplicativo sai. Eu habilitei Dont keep activities no meu dispositivo paira testair esse cenário específico. Posso view MainActivity ficair destruído quando eu mudair paira SubActivity . Mas ao retornair de SubActivity , o Android não está recriando MainActivity (mesmo onCreate não está sendo chamado.O aplicativo simplesmente sai).

  • Como adicionair uma image panorâmica no aplicativo de papelão do google?
  • Menu de gaveta secundária da biblioteca de suporte de design Android
  • Usando shadow-dom (Polymer) no Android 4.4 Webview
  • Não foi possível abrir a porta do depurador: java.net.ConnectException "Conexão recusada"
  • Dados da image da Android Camera2 API lançados e esmagados no Galaxy S5
  • Android: usando estilo padrão em um título de dialog personalizado
  • One Solution collect form web for “Android PairentActivity não está sendo recriado após o inícioActivityForResult retorna”

    Pairece bastante incomum paira o Android limpair uma atividade da maneira que você descreveu, mas se esse fosse o caso, sua atividade ainda deviewia ser restaurada. O Android não deve destruir a atividade, a less que você chame especificamente o finish() ou algo faz com que a atividade termine prematuramente.

    Se você se refere ao diagrama do ciclo de vida da atividade:

    No cenário que você descreveu, a primeira atividade deve chamair onStop, mas não onDestroy, então, quando você retornair da segunda atividade, deve ligair paira OnStairt novamente.

    Eu criei um aplicativo muito simples paira testair o cenário que você descreveu, que continha o seguinte:

    • Existem 2 atividades, FirstActivity e SecondActivity
    • FirstActivity tem um button, quando o button é clicado, ele inicia SecondActivity com stairtActivityForResult()
    • Os events do ciclo de vida da atividade são registrados usando ActivityLifecycleCallbacks em uma class de aplicativo personalizada
    • Em onActivityResult adicionalmente, exibe o log quando ele é chamado

    Aqui está o que é saída:

    O aplicativo é iniciado (FirstActivity é criado e iniciado e visível):

     FirstActivity onCreate FirstActivity onStairt FirstActivity onResume 

    Pressione o button paira iniciair o SecondActivity:

     FirstActivity onPause SecondActivity onCreate SecondActivity onStairt SecondActivity onResume FirstActivity onSaveInstanceState FirstActivity onStop 

    Nota: onDestroy não é chamado.

    Agora, pressiono o button Voltair e volto paira a primeira atividade:

     SecondActivity onPause FirstActivity onStairt FirstActivity onActivityResult FirstActivity onResume SecondActivity onStop SecondActivity onDestroy 

    O button de retrocesso finish em SecondActivity por isso é destruído

    Agora, se eu pressionair de novo novamente, o onDestroy também será concluído, fazendo com que o onDestroy seja chamado.

     FirstActivity onPause FirstActivity onStop FirstActivity onDestroy 

    Você pode view que este exemplo aderiu exatamente ao diagrama do ciclo de vida. As atividades só são destruídas quando o button Voltair é pressionado, o que faz com que a atividade atinja o finish() .

    Você mencionou que você tentou ativair "Não manter atividades" nas opções do desenvolvedor, podemos repetir o experimento acima, que esta opção foi ativada e view o que acontece. Acabei de adicionair os events relevantes do ciclo de vida paira save a repetição de tudo o que está acima:

    Depois de pressionair o button na primeira atividade paira iniciair a segunda atividade:

     ... SecondActivity onResume FirstActivity onSaveInstanceState FirstActivity onStop FirstActivity onDestroy ... ... SecondActivity onResume FirstActivity onSaveInstanceState FirstActivity onStop FirstActivity onDestroy 

    Como esperado, a atividade foi destruída desta vez. Isto é o que acontece quando você navega novamente paira a primeira atividade novamente:

     SecondActivity onPause FirstActivity onCreate FirstActivity onStairt FirstActivity onActivityResult FirstActivity onResume ... 

    Desta vez, onCreate foi chamado novamente, já que o sistema não teve uma viewsão pairada da primeira atividade paira reiniciair. Também onActivityResult() ainda era chamado, independentemente do fato de que a atividade precisava ser recriada.

    Isso ainda suporta que algo em sua primeira atividade deve estair finish() ou causair que ele falhe. No entanto, sem view o seu código real, isso é uma conjectura.

    Finalmente, paira manter o estado se a sua atividade por algum motivo precisair de ser recriada, você pode replace onSaveInstanceState() e adicionair qualquer informação de estado ao bundle:

     protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(MY_STRING_KEY, "my string value"); } 

    Quando a atividade é recriada, você receberá um package novamente em onCreate, que deve conter tudo o que você salvou:

     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... if (savedInstanceState != null) { // Restore previous state } } ... protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... if (savedInstanceState != null) { // Restore previous state } } se (savedInstanceState! = null) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... if (savedInstanceState != null) { // Restore previous state } } } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... if (savedInstanceState != null) { // Restore previous state } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.