Почему onResume вызывается, когда я впервые открываю вкладку табота? - PullRequest
5 голосов
/ 17 декабря 2010

У меня есть вкладка с несколькими вкладками, и на каждой вкладке реализован метод onresume, потому что мне нужно перезагружать все данные из удаленной базы данных каждый раз, когда пользователь снова вводит вкладку, а не только при первом открытии..

хорошо, это хорошо работает, но проблема в том, что когда пользователь впервые открывает вкладку, вызываются два метода, onCreate и onResume, то мое приложение подключается два раза к базе данных, чтобыполучить информацию .... я хочу, чтобы он вызывался только при создании, когда пользователь впервые вводит на вкладке

как избежать этой редкой проблемы?

Ответы [ 3 ]

15 голосов
/ 17 декабря 2010

Как указано в документации по жизненному циклу Activity , onCreate и onResume всегда будут вызываться при первом запуске Activity. При возвращении к Activity будет вызван хотя бы onResume, но onCreate может быть вызван снова, если Android потребуется освободить ресурсы.

Если вам нужно, чтобы настройка выполнялась каждый раз, когда вы возвращаетесь к занятию, почему бы не включить логику в onResume?

0 голосов
/ 17 декабря 2010

Я согласен с другими постерами, что вы должны пересмотреть свое приложение. вы не можете просто ожидать, что вы добавите отдельную активность в закладку, и все будет иметь смысл.

при этом у вас может быть где-нибудь флаг, указывающий, нуждается ли БД в инициализации. в onResume () каждого действия есть что-то вроде

synchronized (MyLock.class) {
    if (!initialized) {
      initDb();
      MyLock.initialized = true;
    }
}
0 голосов
/ 17 декабря 2010

Поскольку содержимое ваших вкладок является активностью, их нужно создавать (и возобновлять) при запуске приложения.

Один из способов избежать этого - использовать представления вместо действий в качестве содержимого вкладки.Таким образом, у вас есть только 1 onCreate() метод, потому что у вас есть только 1 действие (TabActivity).

...