Статические блоки классов, не вызываемые onCreate после onBackPressed

В моем приложении, когда происходит onCreate, я вызываю статический метод другого класса. Например. ИмяКласса.метод(). Этот второй класс содержит статический блок, который также выполняется при вызове метода. Это именно то, чего я хочу.

Однако, когда я нажимаю кнопку «Назад» и возвращаюсь в приложение, снова вызывается onCreate (назад вызывает выполнение onDestroy), и вызывается этот другой метод, но статический блок — нет. Это не тот случай, когда я вручную закрываю приложение от работы в фоновом режиме (техника смахивания), а затем снова открываю его. В этом конкретном случае вызывается статический блок.

Почему статический блок класса не вызывается при перезапуске приложения после onBackPressed?

Спасибо.

Обновление:

Мне кажется класс не удаляется из памяти даже после onDestroy при нажатии назад. У меня сложилось впечатление, что все будет повторно инициализировано, когда снова будет вызван onCreate. Однако, похоже, это не так. Есть ли способ удалить класс при вызове onDestroy?


person Romario    schedule 16.07.2014    source источник


Ответы (2)


Статический блок в классе вызывается во время инициализации класса. Поскольку класс загружается (и инициализируется) только один раз, статические блоки в нем вызываются только один раз.

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

person Bhesh Gurung    schedule 16.07.2014
comment
Это предложение, с которым я пошел. - person Romario; 19.07.2014

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

class StaticTest { 

     static {
         // This will be executed once only. When the class is loaded and initialized.
     }

     static String s = "Exactly like this actually";
}

Но было бы лучше увидеть соответствующую часть вашего кода.

person Shlublu    schedule 16.07.2014
comment
Как я могу выгрузить класс onDestroy? - person Romario; 17.07.2014
comment
onDestroy() — это не класс, а метод. Его нельзя разгрузить. Я видел ваше обновление, и нет, onDestroy() также не выгружает класс. Читая все это, я думаю, что вы смешиваете понятия класса и объектов. - person Shlublu; 17.07.2014
comment
Нет, я использую onDestroy как глагол. Я знаю, что это метод. - person Romario; 19.07.2014