2013-01-23 7 views
6

Desidero eseguire un'azione/evento quando l'applicazione viene uccisa dal task manager o da qualsiasi altra app. C'è qualcosa per eseguire un'azione quando l'applicazione viene uccisa. La mia applicazione è in esecuzione in background come servizio. Se interrompo l'applicazione, il servizio principale si interrompe. Voglio ricominciare.Azione sull'applicazione uccisa in Android

+0

Ricordare che in generale i servizi sempre attivi sono disapprovati a causa dell'impatto che hanno sul dispositivo (utilizzo della CPU, durata della batteria e così via). Potrebbe essere utile dare maggiori dettagli su quale sia il tuo scenario, in modo che le persone qui possano offrirti approcci più fattibili per raggiungerlo. –

+1

"Voglio ricominciare" - quello che vuoi non importa. Cosa vogliono * i tuoi * utenti *. Se i tuoi utenti volevano che la tua app fosse in esecuzione, non l'avrebbero forzatamente fermata. Se non rispetti i tuoi utenti, nessuno ti rispetterà. – CommonsWare

risposta

9

No, non esiste un modo affidabile per sapere se la tua applicazione è stata uccisa da un altro processo. L'intero punto di "uccisione" di un'app è di terminarlo il prima possibile, senza lasciarlo eseguire alcun codice.

== In realtà non utilizzare i seguenti suggerimenti nell'applicazione di produzione. Sono qui puramente come potenziali soluzioni tecniche, ma in generale non sono una buona idea per le app in esecuzione sui dispositivi degli utenti finali. ==

Potrebbe essere possibile utilizzare IBinder.linkToDeath() da un'applicazione secondaria, che funge da monitor per quello principale. Tuttavia, dovrai convincere l'utente a installare anche l'app secondaria. Se riesci a farlo, puoi stabilire un monitoraggio a due lati tra le due app, e fare in modo che uno di loro riavvii l'altro se il secondo viene ucciso.

Si potrebbe anche tentare di impostare un allarme tramite lo AlarmManager che si attiva ogni tanto, per riavviare l'applicazione in caso di morte. Tuttavia, se il periodo di allarme è troppo grande, si rischia di avere un certo periodo di tempo in cui la tua app non è in esecuzione. E se il tuo periodo di tempo è troppo piccolo, molto probabilmente la tua app non sarà consentita da Google nel Google Play Store e l'analisi dell'app malware sul telefono (JB +) potrebbe dare il calcio d'inizio. Inoltre, gli allarmi che si attivano troppo spesso manterranno il dispositivo si sveglia e scarica la batteria molto velocemente.

+0

Potrebbe dirmi come posso i IBinder.linkToDeath() .. –

+0

Dichiarate un servizio in una delle applicazioni. Nell'altro, chiamate 'bindService()', per ottenere un client 'IBinder' per quel servizio. Non è necessario implementare la propria interfaccia, poiché l'unico scopo è rilevare la morte del processo. Una volta ottenuto il 'IBinder' nella seconda app, si chiama' bindToDeath() 'con un'istanza di una classe che implementa' IBinder.DeathRecipient'. Se il primo processo dell'app muore, verrà chiamato 'binderDied()', che indica alla seconda app che la prima app è morta. –

+0

Se hai bisogno di chiudere la prima app in modo pulito, dovrai creare un meccanismo un po 'più complesso per notificare la seconda app in modo che possa rilasciare l'IBinder che contiene, o manterrà la prima app viva come a lungo come la seconda app è viva. –

1

Se si uccide un processo, lo si uccide, quindi smette di funzionare immediatamente. Non c'è nessun evento inviato all'applicazione.

1

Ho cercato la stessa cosa e la risposta che ho trovato è: NO, l'applicazione non va a OnDestroy() o qualcosa del genere.

Problemi correlati