Ориентация экрана Android медленная? - PullRequest
3 голосов
/ 16 февраля 2012

В моем приложении для Android я загрузил некоторые изображения и данные из Интернета в расширяемый вид списка. И я обработал изменения ориентации следующим образом.

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

}

в моем 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 - AsynacTask, который использовал для получения данных из Интернета и загружает ранее загруженные данные после изменения ориентации (без повторного получения новых данных из Интернета), но это очень медленно. Есть ли другой альтернативный способ сделатьэто эффективно ??

Ответы [ 2 ]

2 голосов
/ 05 июня 2013

Наконец, я получил простой способ ускорить изменения ориентации в деятельности.

IDEA:

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

android:configChanges="orientation|keyboardHidden|screenSize"

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

0 голосов
/ 25 марта 2012

Согласно Дэвиду, если isOrentationChnged не установлен в статическое состояние, оно всегда будет ложным, когда ваша деятельность будет воссоздана.

В действительности вам не нужна эта переменная, просто сделайте это в onCreate:

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

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

Кстати, я не вижу, чтобы вы использовали arrGroupelements в вашемКонструктор адаптера.

...