Метод onCreate продолжает вызываться при изменении ориентации устройства - PullRequest
2 голосов
/ 12 января 2012

У меня есть 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);
    }
}

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Вы должны проверить Обработка изменений времени выполнения

Вы можете обработать либо с помощью

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

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

Обработайте изменение конфигурации самостоятельно

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

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

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

Когда ваше действие будет создано снова, вызовите getLastNonConfigurationInstance () , чтобы восстановить ваш объект.

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

Сохранить в OnCreate;

@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" 
1 голос
/ 12 января 2012

Вы можете добавить android:configChanges="orientation" в манифесте Activity и вручную установить contentView или изменить макет, переопределив метод onConfigurationChanged в своей Activity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...