Путаница жизненного цикла деятельности - PullRequest
0 голосов
/ 20 октября 2011

Жизненный цикл действия задокументирован во многих местах, но я не смог найти то, что мне нужно.Это мое занятие, у него есть конструктор и метод onCreate.В моем проекте у меня также есть регистрация этих методов, и каждый раз, когда я перехожу из портрета в ландшафт, я вижу, что оба метода выполняются.Почему мой конструктор называется?это не активность в стеке, а экземпляр моей активности находится в памяти, поэтому, когда происходит изменение конфигурации, должны происходить только состояния oncreate и retainistancestate (конечно, onResume).Почему конструктор вызывается каждый раз, кто звонит?Каждый раз, когда что-то меняется из конфигурации, оба метода гарантированно будут вызываться (один за другим, в той же последовательности).

public TestActivity()
{
    super(R.menu.main_menu, tag);
}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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

Edit1: я читал в некоторых местах, чтоесть стек, в который заносятся действия, поэтому в следующий раз они начнут работать быстрее, но что, когда конфигурация будет изменена?Должен ли он вызывать конструктор и методы oncreate?

Ответы [ 3 ]

0 голосов
/ 20 октября 2011

После поворота ваша активность будет возобновлена. Вы можете предотвратить это с помощью android:configChanges="keyboardHidden| orientation" в вашем манифесте.

0 голосов
/ 30 ноября 2011

Как ответил @rekire, действие возобновляется при повороте экрана.Здесь перезапуск означает, что среда создает другой экземпляр действия, поэтому вызывается конструктор вашего класса активности, а затем onCreate ().Новый экземпляр действия заменяет старый, который будет окончательно переработан GC, если его ссылка не хранится другими.

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

Я нарисовал диаграмму UML для описания жизненного цикла активности Android .

0 голосов
/ 20 октября 2011

Следовательно, нет причины иметь конструктор для вызова действия, если у вас нет конструктора с параметрами (в любом случае onCreate вызывает его для нас ...). Однако в основном это похоже на то, что java onCreate, вероятно, вызывает конструктор по умолчанию activties, который является

public ActivityName(){} // This might get call because onCreate somewhere under the hood invoking Activity :)

Попробуйте то же самое с конструктором с параметром, как

public ActivityName(String s){}// This wouldn't be call unless you explicitly call it.

Надеюсь, это поможет,

Я бы подождал более экспертного ответа:)

<ч /> Изменить: Итак, когда вы поворачиваете свой телефон, который вызывает onCreate, поскольку он будет создан снова, и onCreate, вероятно, вызывает конструктор по умолчанию, чтобы вызвать экземпляр вашей активности:) ... Я забыл упомянуть об этом ранее.

...