Когда мое приложение стало сложным, и основная активность начала хранить в памяти много данных (загружаемых и проанализированных из файлов в ответ на действия пользователя), я (ошибочно) переключился с onSaveInstanceState
на onRetainNonConfigurationInstance
не заметив, что onRetainNonConfigurationInstance
не вызывается, когда приложение убито до сохранить память устройства. Так как теперь я должен переключиться обратно на onSaveInstanceState
я хочу, как правильно обрабатывать огромное количество данных, распределенных десятками объектов? Должен ли я реализовать сериализацию для всех этих объектов (Parcelable
?) Или могут быть поставлены все данные в Service
нити, надеясь, что не будет убит? Какова наилучшая практика?
Я закончил с уродливым, но единственным приемлемым решением:
Application
.Service
переднего плана, чтобы объект приложения не был убит, даже если все действия были убиты. onRetainNonConfigurationInstance
устарела. Теперь лучше и проще использовать новый API-интерфейс Fragment. В основном вы расширяете класс Fragment
, вызываете setRetainInstance(true)
и помещаете все переменные, которые вы хотите сохранить здесь (ну, это немного сложнее, но документация очень понятна и содержит несколько образцов).
Он был введен в API 11, но доступен на старых платформах через пакет совместимости с Android.