Жизненный цикл активности и путаница с базой данных - PullRequest
1 голос
/ 26 декабря 2011

У меня есть действие, в котором я открываю базу данных, вызывая конструктор SQLiteOpenHelper.

dbHelper = new DBHelper(this); //DBHelper class extends SQLiteOpenHelper

Затем при нажатии кнопки я открываю другое действие и закрываю dbHelper.

int cuisineId = HelperUtils.getCuisineIdByName(dbHelper,cuisine);
SingletonGlobalClass.getInstance().setCuisineId(cuisineId);
String restaurantNameSearchStr = restaurantName.getText().toString().trim();
Intent intent = new Intent();
intent.setComponent(new ComponentName("ctnxa.android", ctnxa.android.SearchResultActivity"));
intent.putExtra("searchStr", restaurantNameSearchStr);
intent.putExtra("option", R.string.restaurant);
startActivity(intent);
dbHelper.close();

Теперь, когда я нажимаю кнопку «Назад», она возвращается к этому занятию.Когда я пытаюсь снова нажать кнопку поиска, он использует dbHelper и работает как обычно без каких-либо ошибок.Я ожидаю, что он не должен работать, так как dbHelper уже был закрыт ранее, и его можно восстановить только при вызове метода onCreate (), который в этом случае не вызывается, так как я нажимаю только кнопку назад (он должен вызватьonResume ()).Я действительно смущен.Может ли кто-нибудь объяснить, что здесь происходит?

Редактировать: так я реализовал dbHelper.close ()

@Override
public synchronized void close() {
    super.close();
}

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011

Когда вы запускаете новый Activity, первый Activity может проходить или не проходить различные этапы «выхода», но нет гарантии, через какие этапы он пройдет.Это полностью зависит от доступных ресурсов и других факторов на отдельном устройстве.

Первый Activity может просто приостановиться, и когда вы вернетесь, он возобновится.Тем не менее, первое действие может быть остановлено или даже уничтожено.Нет никакой гарантии, что ОС Android будет делать с первым Activity.

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

Единственный способ убедиться в этом - переопределить все методы, такие как onPause, onStop и onDestroy, и каждый из них должен использовать Log, чтобы показать, через какие этапы проходит первый Activity.

1 голос
/ 17 января 2012

Вы можете избежать этой путаницы, гарантируя, что существует только один SQLiteOpenHelper на протяжении жизненного цикла приложения.проверить это ответ для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...