Метод Oncreate продолжает вызывать при изменении ориентации устройства

StackOverflow https://stackoverflow.com/questions/8839736

Вопрос

у меня есть AsyncTask который называется onCreate() в моем Main Activity. Анкет В то же самое Activity Если ориентация изменяет AsyncTask снова вызывается. Как мне предотвратить это или как реструктурировать свою программу, чтобы избежать этого?

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);
    }
}
Это было полезно?

Решение

Можете добавить android:configChanges="orientation" В деятельности Manifest и вручную установить ContentView или изменить макет, переопределив OnConfigurationChanged метод в вашей деятельности.

Другие советы

Вы должны проверить Работа с изменениями времени выполнения

Вы можете справиться с ними, используя

Сохранить объект во время изменения конфигурации

Позвольте вашей деятельности перезагрузить при изменении конфигурации, но переносите объект состояния в новый экземпляр вашей деятельности.

Обрабатывать конфигурацию изменить себя

Предотвратите перезапуск системы во время определенных изменений конфигурации, но получите обратный вызов, когда конфигурации действительно изменяются, чтобы вы могли вручную обновить свою деятельность по мере необходимости.

Чтобы сохранить объект во время изменения конфигурации времени выполнения:

Переопределить метод onretainnonconfigurationinstance () Чтобы вернуть объект, который вы хотели бы сохранить.

Когда ваша деятельность снова создается, позвоните getlastnonconfigurationinstance () Чтобы восстановить свой объект.

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

Удерживать в онреате;

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

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

Или просто добавьте этот код в вас, проявляющуюся в своей деятельности

 android:screenOrientation="portrait" 

или же

 android:screenOrientation="landscape" 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top