2017-09-25 4 views
3

Je dois désactiver l'animation de transition d'activité pour tous les écrans de mon application. solution précédente a bien fonctionné pour toutes les versions Android:Oreo: désactiver l'animation de transition d'activité

<style name="base_theme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:windowAnimationStyle">@null</item> 
</style> 

... mais pour Android 8 "Oreo" il cause écran noir clignotant pour chaque transition (aller de l'avant ou à l'arrière). C'est à dire. il n'y a toujours pas d'animation, mais des clignotements très gênants ont lieu (90% de chance, ~ 20-30 millisecondes, tout l'écran).

Selon ma « recherche »:

  • il ne dépend du contenu de l'activité et reproduite avec des activités vides
  • il n'y a pas un travail de fond qui pourrait ralentir le processus de transition
  • intention. FLAG_ACTIVITY_NO_ANIMATION clignote aussi bien
  • overridePendingTransition (0,0) ne fonctionne pas trop

La seule solution que je pouvais trouver:

Définir une animation de transition vide

<?xml version="1.0" encoding="utf-8"?> 
<set /> 

et l'appliquer à toutes les activités dans l'application (onCreate & finition)

overridePendingTransition(R.anim.animation_activity_none, R.anim.animation_activity_none); 

Question:

Est-ce vrai? moi genre de nouvelles restrictions pour Oreo (i.e. fonctionnalité), ou bug de plate-forme, ou peut-être le problème de l'application? Y a-t-il d'autres solutions?

[UPDATE]

Encore une conclusion. Assurez-vous que vous appelez l'activité finish() et overridePendingTransition() paire sur le thread principal! Sinon, la course de thread se produit et overridePendingTransition n'est pas appliqué parfois.

[UPDATE]

Google a confirmé que c'est un bogue dans Android 8.0, probablement fixé à 8,1. Ainsi, la solution « animation vide » pendant des années, jusqu'à ce que minSdkVersion == 27.

+0

https://stackoverflow.com/a/11079475/2949834 Avez-vous essayé de changer parent comme parent = "android: Theme"? – kimkevin

+0

@KimKevin oui, ça cligne quand même. Donc, il ne s'occupe pas d'activité ou d'AppCompatActivity. –

+0

@SergeyKrivenkov merci beaucoup pour cela. Je peux voir que vous avez fait beaucoup de travail minutieux pour explorer ce problème et explorer des cas de test réduits. Votre solution m'a donc épargné beaucoup de temps dans la même voie. Avez-vous signalé cela dans le tracker d'Android? – hustoj2

Répondre

1

J'ai eu le même problème, et je réussi à le résoudre, l'idée est de jouer rien, s'il vous plaît voir le XML ci-dessous:

dossier valeurs

<style name="yourTheme"> 
    <item name="android:windowAnimationStyle">@style/ThemeApp.Animation.Activity.Replace</item> 

<style name="ThemeApp.Animation.Activity.Replace"> 
    <item name="android:activityOpenEnterAnimation">@anim/replace_anim</item> 
    <item name="android:activityOpenExitAnimation">@anim/replace_anim</item> 
    <item name="android:activityCloseEnterAnimation">@anim/replace_anim</item> 
    <item name="android:activityCloseExitAnimation">@anim/replace_anim</item> 
    <item name="android:taskOpenEnterAnimation">@anim/replace_anim</item> 
    <item name="android:taskOpenExitAnimation">@anim/replace_anim</item> 

Dossier Anim: replace_anim.xml

<set/> 
+0

vous avez décrit la même solution que celle mentionnée dans la partie Question ci-dessus - jouez une animation vide. Mais la question: pourquoi cela arrive? –

+0

Veuillez vérifier le lien d'émission. Android a confirmé qu'il s'agissait d'un bug dans O qui est apparemment déjà résolu. Je ne l'ai pas encore confirmé mais ils ont joint une vidéo –