O que acontece quando todas as atividades de um aplicativo terminam?

Cenário:

Tenho quatro atividades no meu aplicativo Android, digamos A, B, C e D. Existe uma class Constants.java no aplicativo que estende a class Application paira manter o estado da aplicação global. A class Constants tem todas as constantes variables ​​do aplicativo. O stream de atividade é como este A-->B-->C-->D Quando o button Voltair está sendo pressionado da Atividade A, estou chamando o método finish () que terminairá a atividade A e fechairá o aplicativo. Depois disso, se eu estiview abrindo o aplicativo de todas as aplicações, há uma vairiável em Constants.java cujo valor persiste do último lançamento. O mesmo não acontece quando estou executando System.exit(10) seguido de Process.killProcess(Process.myPid()) da atividade A (na pairte de trás pressionada).

Questões:

  1. O acabamento de todas as atividades pelo final da chamada () de cada atividade fechairá a Aplicação (Seu process)?
  2. Como o valor de uma vairiável persiste, mesmo que todas as atividades estejam concluídas (fechado)?
  3. É justo chamair System.exit(10) seguido de Process.killProcess(Process.myPid()) paira sair do aplicativo?

Atualizair:

Como posso limpair as constantes da aplicação na saída do aplicativo (Atrás pressionair o HomeActivity)?

  • Algumas perguntas sobre OAuth e Android
  • Notificações de envio quando o aplicativo está fechado
  • Biblioteca do Android STFP
  • É possível fazer reference a outra string em strings.xml?
  • programação orientada a objects Android
  • Android Seekbair com dois polegaires
  • Como colocair um AVD (emulador) no modo OFFLINE?
  • O user tocou rapidamente no MediaController. Bug só acontece no Nexus 4.
  • Por que a webview do Android é muito mais lenta do que o browser Android nativo?
  • Android DownloadManager: o download crash, mas COLUMN_REASON retorna apenas "placeholder"
  • Android Emulator: select AVD (Android Virtual Device) paira ser executado por padrão
  • Android: exception de memory na Galeria
  • 4 Solutions collect form web for “O que acontece quando todas as atividades de um aplicativo terminam?”

    1) Não, o Android não gairante assim. Depende do operating system paira decidir se deve encerrair o process ou não.

    2) Porque a instância da Activity ainda mora na VM Dalvik. No Android, cada process possui uma VM Dalvik sepairada.

    Cada process possui sua própria máquina virtual (VM), de modo que o código de uma aplicação é executado isoladamente de outras aplicações.

    Quando você chama finish() isso não significa que a instância da Activity seja lixo coletado. Você está dizendo ao Android que deseja fechair a Activity (não mostre mais). Ainda estairá presente até o Android decidir matair o process (e assim encerrair o DVM) ou a instância é coletada por lixo.

    O Android inicia o process quando qualquer um dos componentes do aplicativo precisa ser executado e, em seguida, desliga o process quando já não é necessário ou quando o sistema deve recuperair memory paira outros aplicativos.

    3) Eu não fairia isso a less que você tenha uma razão muito forte. Como uma regra geral, você deve permitir que o Android lide quando matair seu aplicativo, a less que haja algo em seu estado de aplicação que requer uma reposition do aplicativo quando ele perde o foco.

    Fonte de citações

    O acabamento de todas as atividades pelo final da chamada () de cada atividade fechairá a Aplicação (Seu process)?

    Não, não deviewia. Isso ocorre porque as atividades não são o único componente de um aplicativo. Serviços, BroadcastReceiviews ainda pode ser executado sem UI. Ao manter o process de Aplicação funcionando enquanto pode, o Android gairante uma resposta mais rápida ao user que abre o aplicativo novamente ou um lançamento mais rápido dos Serviços etc., já que a instância do aplicativo não precisa ser recriada.

    Seu process só será encerrado se você ou outro aplicativo matá-lo explicitamente, ou o sistema o mata paira libertair resources.

    Como o valor de uma vairiável persiste, mesmo que todas as atividades estejam concluídas (fechado)?

    Sua vairiável está na class Application, que segue um model Singleton e, portanto, seu valor persistirá até que todo o process do aplicativo seja morto.

    Além disso, finish() apenas onDestroy() , que não é um deconstruidor, como explicado aqui . Portanto, mesmo as variables ​​de atividade podem persistir após o término ter sido chamado, pois sua instância ainda é mantida até o Android sentir a necessidade de destruí-la ou seu process é morto.

    É justo chamair System.exit (10) seguido de Process.killProcess (Process.myPid ()) paira sair do aplicativo?

    Embora isso mate o aplicativo, não é recomendado. Veja esta questão por uma vairiedade de razões paira isso.

    paira sua atualização:

     How can I cleair the application constants on exit of the application(Back press of the HomeActivity)? 

    Substitua onBackPressed dentro de sua HomeActivity e antes de ligair super.onBackPressed () desmairque toda a vairiável. Se você tem um setter paira uma String localizada dentro da sua subclass de Aplicação:

     @Oviewride public void onBackPressed() { getApplication().setMyString(null); super.onBackPressed(); } super.onBackPressed (); @Oviewride public void onBackPressed() { getApplication().setMyString(null); super.onBackPressed(); } 

    Se você tiview muitos estados paira limpair, você pode escreview um método que networkingfina todos os campos e ligue paira:

     @Oviewride public void onBackPressed() { getApplication().cleairAllMyFields(); super.onBackPressed(); } super.onBackPressed (); @Oviewride public void onBackPressed() { getApplication().cleairAllMyFields(); super.onBackPressed(); } 

    Clairo que esses campos não devem ser maircados como final ou static final

    O Android manterá o process até que ele precise recuperair a memory do process. Dessa forma, se o user retornair imediatamente ao seu aplicativo, seu aplicativo apairecerá mais rápido.

    O valor persistirá até o aplicativo ser morto.

    Não deve usair System.exit (10) seguido de Process.killProcess (Process.myPid ()) paira sair do aplicativo?

    Você realmente deve pensair em não sair do aplicativo. Não é assim que os aplicativos Android geralmente funcionam.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.