Вопрос жизненного цикла активности Android: когда совершать GlobalPreferences - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть куча пользовательских настроек, которые сохраняются в одноэлементном объекте в моем приложении.Пример модели выглядит следующим образом -

public class UserContext {
    public static final String WEBSRV_IP = "TRIMMED";
    public static UserContext instance;
    // Contains username, password, if they're valid etc.
    private LoginDataModel loginModel; 
    private ArrayList<FacilityDataModel> model;
    private FilterDataModel filters;

    private UserContext()
    {

    }

    public UserContext getInstance()
    {
        if(instance == null) {
            instance = new UserContext();
        }
        return instance;
    }   
    // Getters and setters
}

Итак, теперь, когда пользователь просматривает приложение, у меня есть несколько созданных операций, которые проходят жизненный цикл, используют эти переменные и завершают работу.(Например, в методе onStart() я проверяю, вошел ли пользователь перед представлением действия).

У меня такой вопрос, что документы для Android рекомендуют мне создавать резервные копии любых данных, связанных с контекстом, в моем onPause() метод.Но onPause() также вызывается каждый раз, когда я сам создаю новое действие, и, кажется, расточительно резервировать все GlobalVariables только для восстановления их в методе onStart() следующего действия.Есть ли способ определить, все ли приложение перешло в фон?Если нет, когда вы на самом деле сохраните все свои глобалы?

Спасибо,Тея.

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Я сохраняю настройки (с SharedPreferences.Editor.commit ()) в тот момент, когда значение предпочтения определяется пользователем или кодом приложения.Я еще не сталкивался со сценарием, когда откладывается сохранение настроек до тех пор, пока они не будут определены.

1 голос
/ 20 апреля 2011

Я думаю, что дело каждого приложения будет отличаться.onPause () не является ненавистной идеей, если вам нужно сохранить состояние этого действия.Что если пользователь перейдет к другому из ваших собственных действий, а затем нажмет кнопку «Домой»?Ваше приложение перейдет в остановленный через onStop ().Если они перезапускают ваше приложение, есть разумное ожидание (возможно), что предыдущее состояние было сохранено.

Я сохраняю их, когда их имеет смысл сохранить.Например, у меня есть приложение SMS, в котором я позволяю пользователю сохранить последнее отправленное сообщение.Я сохраняю их последнее сообщение, когда нажимаю кнопку отправить.Я ничего не делаю с OnPause () или onStop (), но я все делаю, когда пользователь ожидает, что это будет сделано.

Разработчики традиционно ненавидят if-logic, но мудрый друг всегда напоминает мне:логика в уме пользователя ".Если я сделаю это, то это произойдет ... в моем случае;если я отправлю сообщение, мое сообщение будет сохранено.

0 голосов
/ 20 апреля 2011

Единственный раз, когда вызывается onPause () и onStop () НЕ вызывается ... это если ваша активность все еще фактически видна под другой активностью, которая только частично скрыла его.В большинстве случаев также вызывается onStop (), и если вы знаете, что в своих собственных структурах действий вы всегда будете полностью скрывать действия друг друга, я бы рассмотрел сохранение в onStop () и восстановление в onStart ().

Также помните, что все, что вы сохраняете в onPause (), должно быть восстановлено в onResume ().То, что сохраняется в onStop (), вероятно, должно быть восстановлено в onStart ().Если onPause () происходит, но onStop () не ... onStart () не будет вызываться.

Я должен также добавить, что я согласен с утверждением Билла Мота, что вы должны сохранять вещи, когда это имеет смыслк.Как только вы хорошо разберетесь в структуре жизненного цикла Activity, вы, как правило, можете сделать хороший выбор.

...