Comment setOffscreenPageLimit() améliorer ViewPager les performances en conservant plus hors des Fragments?
J'ai un ViewPager
le contrôle de cinq Fragments
. Quand je balayez à partir de Fragment
à l'indice 1 à Fragment
à l'indice 0, il y a une courte pause dans l'animation que j'aimerais éliminer.
Actuellement, je ne suis pas d'appel setOffscreenPageLimit()
, donc je sais que Fragment
0 est actuellement en mémoire par le ViewPager
alors que je suis sur Fragment
1 dans son état de veille, car l'écran hors tension à la limite de page par défaut est 1 (un de chaque côté de l'actuel Fragment
).
Voici où ça devient confus. Si je l'appelle setOffscreenPageLimit(4)
sur mon ViewPager
, la pause dans le mouvement de balayage de 1 à 0 de l'animation est allé -- l'animation est fluide.
Donc, j'en conclus que, d'une certaine manière, en gardant Fragments
2 à 4 dans la mémoire améliore l'animation de Fragment
1 à Fragment
0.
Comment conserver Fragments
2-4 améliorer le balayage de l'animation de Fragment
1 à Fragment
0?
Modifier
J'ai couru TraceView, à l'aide de onPageScrollStateChanged(int state)
pour déterminer quand commencer et arrêter la trace, comme suit:
@Override
public void onPageScrollStateChanged(int state) {
if (state == 1 && mViewPager.getCurrentItem() == 1) {
Debug.startMethodTracing("ViewPagerTesting", 100000000);
}
if (state == 0 && mViewPager.getCurrentItem() == 0) {
Debug.stopMethodTracing();
}
}
Il semble que la ViewPager
's méthodes d'accessibilité sont à l'origine du thread de l'INTERFACE utilisateur de figer. Quand je l'appelle setOffscreenPageLimit(4)
sur le ViewPager, ces méthodes d'accessibilité sont en bas dans la trace -- prise négligeable de temps pour terminer.
Quelle est la cause de ce retard?
J'ai fait de la Musique app avec plusieurs onglets. Tous les onglets sont intégrés avec ViewPager. Maintenant, si je fais sa offScreenPageLimit pour NOMBRE D'ONGLETS. il fonctionne très bien mais quand il a également appelé méthode de reprise de l'INTERFACE et de devenir accrocher. Avez-vous une idée. Je suppose que ma question est liée à ce sujet, c'est pourquoi j'ai ajouter un commentaire ici.
Comme je l'ai écrit dans mon commentaire, utilisez Traceview et le savoir. Ou utiliser la journalisation et le savoir.
merci pour votre réponse. Permettez-moi de le vérifier. et si j'ai eu stuch en, s'il vous plaît m'aider... Merci encore une fois.
et iDoid Explorer - face même genre de problème - je suis en utilisant viewpager avec 5 pages, l'application fonctionne parfaitement avec la normale de balayage arrière et à l'avant, mais quand je l'utilise même pour le clavier sans fil de l'accessibilité, il obtient gèle à un certain point, j'ai essayé d'ajouter "setOffscreenPageLimit(les pages.la longueur);" il commence à naviguer sans congélation n'importe où. Maintenant, mon point est - problème est résolu mais que fait-il à résoudre? une idée?
OriginalL'auteur Matt Logan | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez la valeur par défaut de mise en œuvre de
setOffscreenPageLimit()
c'est que le chargement des un fragment qui est à la droite de celui-ci. Pour eg. lorsque vous êtes sur l'index 1, il a un index de 2 chargés dans la mémoire, mais pas d'indice 0, donc glisser vers la gauche devra générer un nouveau fragment à partir de zéro. Pour tester cette théorie, vous pourriez vouloir utilisersetOffscreenPageLimit(2)
et puis essayer de glisser l'index 1->0. Ce n'est en aucun cas la solution optimale, mais il vous aidera à effacer vos doutes sur le concept.onResume()
du fragment 2 était de bloquer le thread d'INTERFACE utilisateur. C'est un peu paradoxal, ma première réaction a été que le pause du fragment 2 était à l'origine du retard, pas le reprise d'.Est-il un moyen de régler le fragment qui se passe à l'écran? J'ai 3 fragments et le troisième chevauche le second, après avoir été appelé pour la première fois, comment puis-je l'éviter?
OriginalL'auteur Shakti