Show Menu
SUJETS×

Suivi des blocages d’application

Ces informations vous aident à comprendre le mode de suivi des blocages ainsi que les bonnes pratiques pour traiter les faux blocages.
Les blocages d’application sont suivis dans le cadre des mesures de cycle de vie. Avant de pouvoir suivre les blocages, ajoutez la bibliothèque à votre projet et mettez en œuvre le cycle de vie. Pour plus d’informations, voir Ajout du SDK et du fichier de configuration au projet IntelliJ IDEA ou Eclipse dans Mise en œuvre principale et cycle de vie .
Lors de la mise en œuvre des mesures de cycle de vie, un appel est effectué à Config.collectLifecycleData dans la méthode OnResume de chaque activité. Dans la méthode onPause , un appel est envoyé à Config.pauseCollectingLifeCycleData .
Dans pauseCollectingLifeCycleData , un indicateur est défini pour indiquer une fermeture correcte de l’application. Lorsque l’application est à nouveau lancée ou reprise, collectLifecycleData coche cet indicateur. Si l’application ne s’est pas fermée correctement comme déterminé par l’état de l’indicateur, des données contextuelles a.CrashEvent sont envoyées avec l’appel suivant et un événement de blocage est signalé.
Pour garantir une création de rapports de blocage exacte, vous devez appeler pauseCollectingLifeCycleData dans la méthode onPause de chaque activité. L’illustration suivante du cycle de vie des activités Android permet de comprendre pourquoi cette étape est indispensable :
Pour plus d’informations sur le cycle de vie des activités Android, voir Activités .
L’illustration ci-dessus du cycle de vie Android a été créée et partagée par le projet Open Source d’Android et utilisée selon les conditions générales de la licence Creative Commons 2.5 Attribution License .

Qu’est-ce qui peut provoquer le signalement d’un faux blocage ?

  1. Si vous déboguez l’application à l’aide d’un IDE, par exemple Android Studio, un nouveau lancement de l’application depuis l’IDE alors qu’elle est au premier plan provoque un blocage.
    Vous pouvez éviter ce blocage en mettant l’application en arrière-plan avant de la lancer à nouveau depuis l’IDE.
  2. Si la dernière activité en premier plan de l’application est mise en arrière-plan et n’appelle pas Config.pauseCollectingLifecycleData(); dans onPause , et que l’application est fermée manuellement ou terminée par le système d’exploitation, le lancement suivant provoque un blocage.

Comment les fragments doivent-ils être traités ?

Les fragments disposent d’événements de cycle de vie des applications similaires aux activités. Néanmoins, un fragment ne peut pas être actif sans être rattaché à une activité.
Vous devez vous baser sur les événements de cycle de vie pour lesquels les activités contenantes peuvent exécuter votre code. Cet aspect est géré par l’affichage parent du fragment.

(Facultatif) Mise en œuvre des rappels du cycle de vie des activités

À compter du niveau 14 de l’API, Android autorise les rappels globaux de cycle de vie pour les activités. Pour en savoir plus, voir Application .
Vous pouvez utiliser ces rappels pour vous assurer que toutes vos activités appellent correctement collectLifecycleData() et pauseCollectingLifecycleData() . Ajoutez le code suivant uniquement dans votre activité principale et dans toute autre activité dans laquelle votre application peut être lancée :
import com.adobe.mobile.Config; 
  
public class MainActivity extends Activity { 
... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
  
        getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { 
            @Override 
            public void onActivityResumed(Activity activity) { 
                Config.setContext(activity.getApplicationContext()); 
                Config.collectLifecycleData(activity); 
            } 
  
            @Override 
            public void onActivityPaused(Activity activity) {     
                Config.pauseCollectingLifecycleData(); 
            } 
    
            // the following methods aren't needed for our lifecycle purposes, but are required to be implemented 
            // by the ActivityLifecycleCallbacks object 
            @Override 
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} 
            @Override 
            public void onActivityStarted(Activity activity) {} 
            @Override 
            public void onActivityStopped(Activity activity) {} 
            @Override 
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} 
            @Override 
            public void onActivityDestroyed(Activity activity) {} 
        }); 
    } 
... 
}

Pour envoyer des données contextuelles supplémentaires avec votre appel de cycle de vie en utilisant Config.collectLifecycleData(Activity activity , Map<String , Object> contextData) , vous devez remplacer la méthode onResume pour cette activité et vous assurer que vous appelez super.onResume() après avoir manuellement appelé collectLifecycleData .
@Override 
protected void onResume() { 
    HashMap<String, Object> cdata = new HashMap<>(); 
    cdata.put("someKey", "someValue"); 
    Config.collectLifecycleData(this, cdata); 
  
    super.onResume(); 
}