Pourquoi n'y a-t-il pas de capture d'écran dans les applications récentes lorsque vous finissez l'activité dans le firebase onAuthStateChanged

J'ai eu une activité splashscreen très basique:

@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); FirebaseAnalytics.getInstance(this); mAuth = FirebaseAuth.getInstance(); mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { FirebaseAuth.getInstance().removeAuthStateListener(this); startActivity(new Intent(StartActivity.this, MainActivity.class)); finish(); } } }); } 

Cet écran de démarrage ouvre ma MainActivity . Lorsque je ferme cette activité, c'est la capture d'écran dans les applications récentes:

  • Comment arrêter le chargement du téléphone via USB par programme
  • Java ne fonctionne pas avec regex \ s, dit: séquence d'échappement invalide
  • Ligne directrice à choisir parmi AsyncTaskLoader et AsyncTask à utiliser dans Fragment
  • Comment puis-je créer un ListView avec diviseurs de ligne pointillés / pointillés dans Android?
  • Un projet avec ce nom existe déjà dans l'eclipse de l'espace de travail
  • Android: comment obtenir la date de création d'un fichier?
  • Entrez la description de l'image ici

    Il semble qu'il s'agisse de faire une capture d'écran trop tard, ce qui se traduit par cette capture d'écran d'applications récentes imbriquées. Cela se produit également sur un périphérique réel. Comment puis-je résoudre ce comportement étrange?

    Les activités se manifestent:

     <activity android:name="activities.StartActivity" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="activities.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTask"> </activity> 

    Le problème semble ne pas être dans le mode de launchMode . Je continue d'avoir le même comportement. Même lorsque vous retirez le lauchmode.

    Cela n'a absolument rien à voir avec le rappel. Lorsque vous démarrez l'activité directement, il n'y a pas de problème.

    MODIFIER:

    J'ai trouvé une solution. L'utilisation d'un délai dans le démarrage de l'activité le résout. Bien qu'un retard dur ait été retardé.

     new Handler().postDelayed(new Runnable() { @Override public void run() { startActivity(new Intent(StartActivity.this, MainActivity.class)); finish(); } },500); 

    EDIT 2

    Je n'obtiens pas ce comportement lors du démarrage direct de l'activité. Donc, il a probablement quelque chose à voir avec le rappel. J'utilise Google sign-in. Il semble qu'une activité transparente soit fermée. Est-ce que cela pourrait être l'activité Google Sign-in?

  • Accès à l'objet GoogleApiClient dans Toutes les activités
  • Comment calculer la distance en marchant dans Android?
  • BroadcastReceiver ne reçoit pas d'action complète de téléchargement
  • Préférences de numéro dans l'activité préférée dans Android
  • Le fournisseur de contenu est-il une implémentation de Repository Pattern?
  • ClassCastException lors de l'appel de ListView.addHeaderView ()?
  • 3 Solutions collect form web for “Pourquoi n'y a-t-il pas de capture d'écran dans les applications récentes lorsque vous finissez l'activité dans le firebase onAuthStateChanged”

    Au lieu d'appeler finish(); Vous pouvez utiliser l' android:noHistory="true" dans votre application comme android:noHistory="true" :

     <activity android:name=".SplashActivity" android:noHistory="true" /> 

    Ou vous pouvez utiliser FLAG_ACTIVITY_CLEAR_TOP dans votre intention:

     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    Modifier:

    Pourquoi utilisez-vous l' android:launchMode="singleTask" ? Vous devriez probablement changer cela pour android:launchMode="singleInstance" ou supprimer complètement cette ligne. Pour plus d'informations, voici un excellent article sur les modes de lancement

    Je suppose que votre problème est dû à l'utilisation de launchMode singleTask sans taskAffinity .

    Changeons AndroidManifest.xml

     <activity android:name="activities.StartActivity" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="activities.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTask" android:taskAffinity="your_any_string"> </activity> 

    Espérons que cela vous aidera!

    Je n'ai pas réussi à reproduire le problème que vous décrivez, mais puisque vous dites que l'aide de Handler.postDelayed() aide, essayez le code ci-dessous.

    En ajoutant / supprime l'auditeur entre onResume()/onPause() , vous évitez également de démarrer une activité lorsque votre application est en arrière-plan. En outre, si FirebaseAuth détient une liste d'auditeurs, il conservera des références à des activités qui ont déjà été détruites si la méthode onCreate() multiple, par exemple lors de la rotation. Vous pouvez donc éviter les fuites de mémoire.

     private FirebaseAuth.AuthStateListener authStateListener; @Override protected void onResume() { super.onResume(); FirebaseAnalytics.getInstance(this); authStateListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { FirebaseAuth.getInstance().removeAuthStateListener(this); authStateListener = null; startActivity(new Intent(StartActivity.this, MainActivity.class)); finish(); } } }; FirebaseAuth.getInstance().addAuthStateListener(authStateListener); } @Override protected void onPause() { super.onPause(); if (authStateListener != null) { FirebaseAuth.getInstance().removeAuthStateListener(authStateListener); } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.