méthode onCreate ne cesse de s'appeler lorsque l'orientation des changements de l'appareil
-
27-10-2019 - |
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);
}
}
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"