2014-10-30 6 views
-1

Я создал приложение для Android, которое использует одноэлементный режим для хранения своего состояния. Класс создается при запуске приложения.Сохранять экземпляр одиночного экземпляра после исключения исключения

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

Проблема возникает при сбое активности по какой-либо причине.

Как правило, Android закрывает активность, отображая на переднем плане предыдущую, которая была активной. Так как предыдущее действие также использовало синглтон как-то, ему нужны данные из него, чтобы возобновить (например). Дело в том, что singleton больше недоступен, пока предыдущая активность работает в новом Контексте приложений, заставляя Singleton повторно создавать экземпляр себя без каких-либо данных.

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

Я хотел бы услышать ваш материал по этому вопросу. Приветствия!

Здесь приведен метод создания экземпляра Singleton.

final public class Data { 
    private static Data INSTANCE = new Data(); 

    private Data() {} 

    public static Data getInstance() { 
     return INSTANCE; 
    } 
} 
+1

Как вы создаете экземпляр своего синглтона? Поместите некоторый код. – localhost

+0

Вы не можете использовать sharedpreferences? – Poutrathor

+0

@localhost там вы идете. – ikromm

ответ

0

Если вы заявляете свой синглтон как статический на корневую активность, его следует сохранить. Мы использовали статические varaibles, связанные с базовой активностью, из которой каждый вид деятельности.

Решение Antoher может заключаться в использовании sharedpreferences.

Приятно беспокоиться о производительности, но если у вас есть много фрагментов и несколько мероприятий, было бы фрагмент, который приведет к тому, львиной доле из ТОЙ нагрузки

0

1) Вы можете использовать Application класс. Это будет уничтожено на самом последнем этапе.

2) Если данные не структурированы - вы можете держать его в SharedPreferences (в виде строки отображенной с JSON, например)

3) Если ваши данные структурированы - вы должны хранить его в БД (или лучше ContentProvider)

Смежные вопросы