Как предотвратить перегрузку активности на обратное действие - PullRequest
2 голосов
/ 24 июня 2011

У меня есть приложение, которое подключается к Интернету для получения данных. Я могу получить доступ к данным многоуровневой.

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

Есть ли возможность предотвратить это?

Я попытался запустить упражнение в режиме с одним верхом.

Ответы [ 4 ]

2 голосов
/ 24 июня 2011

У вас есть много вариантов здесь. Более простой способ - не останавливать свой activity при переключении на другой. Когда вы переходите на уровень 4 с помощью startActivity(), ваш onPause() вызывается на уровне 3, но он продолжает жить в фоновом режиме. Затем, когда вы вернетесь из 3, onResume() называется. Так что, пока вы не загружаете данные на resume или finish() на level 3 activity, все будет в порядке. Если в системе слишком мало ресурсов, то активность уровня 3 может быть убита (хотя это очень редко) и перезапущена , когда вы вернетесь к ней, но если это произойдет, это означает, что системе нужна память для что-то важное, и это, вероятно, нормально перезагрузить.

Теперь, есть и другие способы . Обычно лучше сделать это, как я описал выше, но если по какой-то причине вы хотите закончить упражнение 3 уровня, Вот ваши варианты. Как уже было отмечено, вы можете выбрать куда-нибудь сбросить свои данные. Сохраненное состояние экземпляра является опцией, хотя, если объем данных превышает несколько килобайт, это не рекомендуется. Идея в том, что , вы сохраняете свои данные в onSaveInstanceState() в Bundle и восстанавливаете их в onCreate(). Если это тяжелые данные, лучше поместить их в файл кэша.

Если у вас есть модель данных и вы хотите использовать одни и те же данные в нескольких действиях, например, в виджете и, возможно, даже в другом приложении, вы можете подумать о создании ContentProvider для предоставления данных. Он будет жить независимо от других частей вашего приложения и управлять доступом к данным. Другие части будут запрашивать у них необходимые данные.

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

2 голосов
/ 24 июня 2011

Переместить код загрузки данных в событие single-exec: onStart или

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState == null) {
         // here
    }
}
1 голос
/ 06 февраля 2014

Вы можете добавить этот параметр в свои намерения, чтобы предотвратить перезагрузку.

//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(new Intent(this,My.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
1 голос
/ 24 июня 2011

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

Если действие было выполнено, оно не достигнет этого кода снова. Конечно, этот флаг должен быть сохранен где-то в контексте приложения или в SharedPreferences.

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