Почему onresume вызывается, когда я впервые открываю вкладку табхоста?
-
11-10-2019 - |
Вопрос
У меня есть табхост с некоторыми вкладками, и каждая вкладка реализовала метод Oneresume, потому что мне нужно перезагрузить все данные из удаленной базы данных каждый раз, когда пользователь снова вводит в табуст, а не только в первый раз, когда он открывает их.
Хорошо, это работает хорошо, но проблема в том, что когда пользователь впервые открывается вкладка, два метода, oncreate и onResume, называются, то мое приложение подключается два раза в базу данных, чтобы получить информацию .... Я хочу, чтобы меня вызвали только Create, когда пользователь впервые входит в Tabhost
Как избежать этой редкой проблемы?
Решение
Как указано в Документы жизненного цикла активности, Oncreate и OnResume всегда будут называться в первый раз, когда начинается деятельность. Возвращаясь к деятельности, по крайней мере, он будет вызван, но Oncreate может быть снова вызван, если Android будет необходим для освобождения ресурсов.
Если вам нужна настройка, каждый раз, когда вы возвращаетесь к деятельности, почему бы не только вкладывать логику в Oneresume?
Другие советы
Поскольку содержимое ваших вкладок является действием, они оба должны быть созданы (и возобновлены), когда вы запускаете приложение.
Один из способов избежать этого - использовать представления вместо действий в качестве содержимого вкладки. Таким образом, у вас есть только 1 onCreate()
метод, потому что у вас есть только 1 активность ( TabActivity
).
Я согласен с другими плакатами, что вы должны повторно фактически фактические приложения. Вы не можете просто ожидать, что вы вставьте автономное занятие в вкладку, и все имеет смысл.
При этом у вас может быть где -то флаг, который указывает, нуждается ли БД инициализация. В каждой деятельности onresume () у вас есть что -то вроде,
synchronized (MyLock.class) {
if (!initialized) {
initDb();
MyLock.initialized = true;
}
}