Question

J'ai un AsyncTask qui est appelé onCreate() dans mon Main Activity. Dans le même Activity si l'orientation change le AsyncTask est appelé à nouveau. Comment puis-je éviter cela ou comment puis-je restructure mon programme pour éviter que cela se produise?

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pages);
        StartProcess sProcess = new StartProcess();
        sProcess.execute(this);
    }
}
Était-ce utile?

La solution

Vous pouvez ajouter android:configChanges="orientation" dans le manifeste d'activité et régler manuellement la contentView ou modifier la mise en page en remplaçant le onConfigurationChanged dans votre activité.

Autres conseils

Vous devriez vérifier Handling Run Time Changes

Vous pouvez gérer soit en utilisant

Maintenir un objet lors d'un changement de configuration

Laissez votre activité à redémarrer lors d'un changement de configuration, mais portent un objet stateful à la nouvelle instance de votre activité.

Manipulez le changement de configuration vous

Empêcher le système de redémarrer votre activité au cours de certaines modifications de configuration, mais recevoir un rappel lorsque les configurations changent, de sorte que vous pouvez mettre à jour manuellement votre activité si nécessaire.

Pour conserver un objet lors d'un changement de configuration d'exécution:

surchargent méthode onRetainNonConfigurationInstance () pour retourner l'objet que vous souhaitez conserver.

Quand votre activité est créée à nouveau, appel getLastNonConfigurationInstance () pour récupérer votre objet.

@Override
public Object onRetainNonConfigurationInstance() {
    final MyDataObject data = collectMyLoadedData();
    return data;
}

Conserver dans OnCreate;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
    if (data == null) {
        data = loadMyData();
    }
    ...
}

Ou simplement ajouter ce code dans vous manifestez vous Activité

 android:screenOrientation="portrait" 

ou

 android:screenOrientation="landscape" 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top