2012-02-16 5 views
3

Dans mon application Android, j'ai chargé des images et des données à partir d'Internet dans la liste extensible. Et j'ai manipulé les changements d'orientation comme suit.Android Screen Orientation lente?

@Override 
public Object onRetainNonConfigurationInstance() { 
    isOrentationChnged=true; 
    final Object data = arrGroupelements; 
    return data; 

} 

dans mon onCreate()

 if(!isOrentationChnged){ 
    new LongRunning().execute(); 

}else{ 

     if((String[][])getLastNonConfigurationInstance()==null){ 
     new LongRunning().execute(); 
     }else{ 
    arrGroupelements= (String[][]) getLastNonConfigurationInstance(); 
    expList.setAdapter(new ExpAdapter(cont)); 
     } 
} 

isOrentationChnged=false; 

LongRunning est un AsynacTask qui ont utilisé pour obtenir les données de l'Internet et il charge les données précédemment chargées après le changement d'orientation (sans obtenir de nouvelles données sur Internet encore une fois) mais il est très lent.Est-il un moyen alternatif de le faire efficacement?

+0

Avez-vous vu [this] (http://developer.android.com/resources/articles/faster-screen-orientation-change.html)? – Ghost

+0

oui j'ai vu que selon ce que j'ai utilisé les méthodes onRetainNonConfigurationInstance() et getLastNonConfigurationInstance() comme ci-dessus. Il fonctionne correctement mais très lentement donc je dois savoir une alternative pour le faire efficacement. –

+0

est ** isOrentationChnged ** une variable statique? Êtes-vous sûr que LongRunning(). Execute() n'est pas ** appelé ** lorsqu'il y a un changement d'orientation? –

Répondre

2

Enfin, j'ai obtenu un moyen simple d'accélérer les changements d'orientation dans une activité.

IDEA:

Chaque changement d'orientation va recréer l'activité la solution à cela, vous pouvez éviter la recréation de l'activité en ajoutant suivant la ligne de code tag activité sur fichier manifeste de votre application. Évitez les activités récréatives après les changements d'orientation afin que votre activité soit plus sensible aux changements d'orientation.

0

Selon David à moins que isOrentationChnged est défini sur statique, il sera toujours faux lorsque votre activité est recréée.

Vous n'avez pas vraiment besoin de toute façon cette variable juste faire cela en onCreate:

arrGroupelements = (String[][]) getLastNonConfigurationInstance(); 
if (null==arrGroupelements){ 
    new LongRunning().execute(); 
} else {  
    expList.setAdapter(new ExpAdapter(cont)); 
} 

De cette façon, si l'activité est recréée alors vos données seront utilisées, sinon l'opération longrunning fonctionnera. Par ailleurs, je ne vous vois pas en train d'utiliser arrGroupelements dans votre constructeur Adapter.