Come uccidere la mia stessa attività – nel modo più duro

Quindi ho la mia attività e alla pressione di un pulsante “Esci” chiamo Activity.finish (). Questo chiude in modo efficace la mia domanda.

Il problema: il processo Dalvik della mia applicazione è ancora in giro come uno zombie in background. Sembra che questo sia normale come altre applicazioni fanno lo stesso. Anche l’esempio di ciao-mondo si blocca nella memoria ..

Potrei vivere con questo, ma sfortunatamente questo comportamento rende doloroso lo sviluppo della mia applicazione. Ho un servizio remoto collegato alla mia attività e questo servizio non scaricherà fino a quando la mia attività non si scaricherà (cosa che, come detto, non funziona mai).

Tutto è in qualche modo tenuto in vita senza una buona ragione.

Come posso rimuovere la mia attività dalla memoria?

Sto cercando qualcosa come la chiamata a Activity.finish_and_kill_my_process_please () o qualcosa di simile.

    Quindi ho la mia attività e alla pressione di un pulsante “Esci” chiamo Activity.finish (). Questo chiude in modo efficace la mia domanda.

    Per favore, non farlo .

    Il processo Dalvik della mia applicazione è ancora in giro come uno zombie in background.

    Il processo è tenuto in una cache, per il potenziale riutilizzo da parte di Android. Puoi tranquillamente ignorarlo.

    Ho un servizio remoto collegato alla mia attività e questo servizio non scaricherà fino a quando la mia attività non si scaricherà (cosa che, come detto, non funziona mai).

    Probabilmente hai un bug nella tua applicazione, come chiamare startService() e non startService() a chiamare stopService() , o chiamare bindService() e non unbindService() a chiamare unbindService() .

    1. Call finish (); sul pulsante clic
    2. Aggiungi questa linea al metodo onDestroy:

    android.os.Process.killProcess (android.os.Process.myPid ());

      public void onDestroy() { super.onDestroy(); android.os.Process.killProcess(android.os.Process.myPid()); } 

    Prova a utilizzare il metodo killBackgroundProcesses :

     ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); activityManager.killBackgroundProcesses("name.of.your.package"); 

    Dovrai aggiungere l’authorization KILL_BACKGROUND_PROCESSES al tuo file AndroidManifest.xml .

    Bene, se non solo l’attività, ma anche l’applicazione che vuoi terminare, puoi usare

    System.exit(0)

    La gente dice che è deprecato o cattivo esempio, ma, beh, è ​​puro Java e funziona …

    Uccidendo il processo è ansible interrompere completamente l’applicazione. Dall’ultima schermata del pulsante Indietro premere per eliminare il processo:

     public void onBackPressed() { super.onBackPressed(); int pid = android.os.Process.myPid(); android.os.Process.killProcess(pid); } 

    Simile a System.exit (0) sul lato Java, è anche ansible chiamare un metodo nativo durante onDestroy che chiama exit (0) sul lato C / C ++. Questo sembra forzare la lib per uscire completamente. Funziona per me!

    Usando ActivityManager possiamo chiudere anche le altre applicazioni.

     private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); am.restartPackage("com.jimmy.appToBeClosed"); 

    per utilizzare il codice sopra dovrebbe avere le autorizzazioni android.permission.RESTART_PACKAGE nel file manifest.

    System.exit () scarica istantaneamente l’intera macchina virtuale con tutte le librerie native, i servizi e così via.