2015-11-22 2 views
0

Я следил за this tutorial и теперь у меня есть собственные классы DB Contract и DB Helper. У меня есть переменная DBHelper в деятельности и я поставил его в onCreate()Должен ли я закрыть свой DBHelper на onStop()?

mDbHelper = new CustomDbHelper(getApplicationContext()); 

мой вопрос: я должен закрыть dbHelper в onStop(), или это ненужно?

@Override 
    protected void onStop() { 
     super.onStop(); // Always call the superclass method first 

     mDbHelper.close(); 
    } 
+0

Youu следует закрыть его в onDestroy. Лучше всего это сделать. –

ответ

1

Нельзя объявить его в методе onCreate.

Самый удобный способ в этом отношении - инициализировать его, когда вам нужно получить к нему доступ. Затем используйте его и закройте сразу после использования. onStop или onDestroy не могут быть вызваны. Таким образом, это нехорошо обрабатывать этот вид ресурсов в этих методах.

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

+0

. Итак, вы предлагаете сделать его локальной переменной? Как я понимаю, close() вызывается, когда он выходит из области действия без какой-либо ссылки, указывающей на него –

0

метод OnStop() в деятельности никогда не может быть названо, в условиях плохой памяти, когда система не имеет достаточно памяти, это будет просто убить активность после того, как его метод OnPause() вызывается. Android Document

Как правило, мы можем перерабатывать ресурсы в onDestroy(), однако это также не может быть вызвано.

+0

, если ваша активность убита, ОС очищает все, что было создано в этом процессе, иначе система будет полна мусора после короткого времени – pskink

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