2017-02-22 7 views
0

В моем приложении для Android я расширил класс Application. У меня есть некоторые метаданные, которые я не хочу повторно инициализировать снова и снова. Я инициализирую их в классе Application, а затем использую их.Причины для объектов, становящихся нулевыми в расширенном классе приложений

private SampleSettings getSettings(){ 
    return sampleSettings; 
} 


public class SampleApplication extends Application { 

    public void onCreate(){ 
    super.onCreate(); 
    sampleSettings = getSettingsFromDB(); 
    } 

} 

Здесь getSettings возвращает null в некоторых случаях при доступе в приложении с использованием applicationContext.

Когда-то я получаю исключение для нулевого указателя для таких свойств. Я видел, когда приложение переходит на задний план, но не часто.

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

Что мне не хватает, что заставляет их стать нулевыми? Thanks

+0

Извините, но ваш вопрос выглядит как один от новичка, который никогда не удосужился прочитать о [mcve]; или посетил [помощь] в целом, чтобы понять, как задавать «код не работающих вопросов». – GhostCat

ответ

3

Ваш процесс не живет вечно. Когда вы не находитесь на переднем плане, your process may be terminated at any time by Android, to free up system RAM for other apps.

Объект Application или любые поля static предназначены только для кеширования и других данных в полете. Ваше приложение должно иметь возможность запускать, от любой активности, лениво инициализировать все это по мере необходимости.

+0

Благодарим за информацию. Можете ли вы предложить образец кода, который может помочь в ленивой инициализации активности. Также есть ли способ имитировать это во время тестирования? –

+0

Думаю, я столкнулся с этим http://www.developerphil.com/dont-store-data-in-the-application-object/: D –

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

  • Нет связанных вопросов^_^