web-dev-qa-db-fra.com

Comment savoir quand mon application a été tuée?

J'ai besoin de savoir quand l'utilisateur tue mon application (force stop). J'ai lu les cycles de vie Android, qui comporte les fonctions onStop() et onDestroy(), ils sont liés à chaque activité que l'utilisateur termine sur mon application, mais pas lorsque l'utilisateur force ou arrête mon application.

Existe-t-il un moyen de savoir quand l'utilisateur tue l'application?

56
Darknoe

il n'y a aucun moyen de déterminer quand un processus est tué. De Comment détecter si Android l'application est forcée arrêtée ou désinstallée?

Lorsqu'un utilisateur ou le système force votre application à arrêter votre application, l'ensemble du processus est simplement tué. Il n'y a pas de rappel effectué pour vous informer que cela s'est produit.

Lorsque l'utilisateur désinstalle l'application, le processus est d'abord arrêté, puis votre fichier apk et votre répertoire de données sont supprimés, ainsi que les enregistrements dans Package Manager qui indiquent aux autres applications les filtres d'intention pour lesquels vous vous êtes inscrit.

20
Taranfx

J'ai trouvé un moyen de le faire .....

  1. Faire un service comme ça

    public class OnClearFromRecentService extends Service {
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.d("ClearFromRecentService", "Service Started");
            return START_NOT_STICKY;
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.d("ClearFromRecentService", "Service Destroyed");
        }
    
        @Override
        public void onTaskRemoved(Intent rootIntent) {
            Log.e("ClearFromRecentService", "END");
            //Code here
            stopSelf();
        }
    }
    
  2. Enregistrez ce service dans Manifest.xml comme ceci

    <service Android:name="com.example.OnClearFromRecentService" Android:stopWithTask="false" />
    
  3. Puis lancez ce service sur votre activité splash

    startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
    

Et maintenant, chaque fois que vous effacerez votre application de Android récent), cette méthode onTaskRemoved() sera exécutée.

REMARQUE: Dans Android O + cette solution ne fonctionne que lorsque l'application est à temps plein au premier plan. Après plus d'une minute avec l'application en arrière-plan, OnClearFromRecentService (et tous les autres services en cours d'exécution) sera forcé automatiquement par le système pour que la méthode onTaskRemoved () ne soit pas exécutée.

113
Faisal Khan

Créer une classe d'application

onCreate()
Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created.
onLowMemory()
This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.
onTerminate()
This method is for use in emulated process environments.

Même si vous êtes tué par l'application ou que vous arrêtez de force, encore une fois Android démarrera votre classe d'applications

4
rajahsekar

Vous pouvez toujours utiliser ce code:

protected void onCreate(Bundle savedInstanceState) {
//...
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
        //inform yourself that the activity unexpectedly stopped
        //or
        YourActivity.this.finish();
        }
    });
//...
}
0
lagoman