Есть ли onPause для всего приложения?

Мое приложение представляет собой набор действий, и у меня нет подкласса Application. Существует статический одноэлементный класс, который запускает повторяющийся таймер (java.util.Timer). Этот таймер необходимо приостановить, когда пользователь покидает мое приложение.

Если бы было только одно действие, я мог бы приостановить и возобновить таймер onPause() и onResume() MainActivity. Как мне решить эту проблему в моем случае?


person Andreas    schedule 03.09.2013    source источник


Ответы (5)


Создайте BaseActivity и приостановите и возобновите работу таймера в onPause и onResume. Затем выведите все остальные действия из BaseActivity.

person Gabriel Negut    schedule 03.09.2013
comment
Если у вас есть одно действие (A1) и вы начинаете другое действие A2, то: A1_pause, A2_create/start/resume, A1_stop. Поэтому, если вы не хотите запускать/останавливать таймер каждый раз, когда вы начинаете новое действие, вам следует добавить дополнительную логику. - person Leonidos; 03.09.2013

Если у вас есть этот статический синглтон, вы можете вызывать onPause() и onResume() из каждого действия.

Поместите вызовы в подкласс Activity, чтобы уменьшить дублирование кода. Расширьте этот новый подкласс во всех своих действиях.

person flx    schedule 03.09.2013
comment
Тогда мне пришлось бы реализовывать onPause() и onResume() в каждом Activity, что не похоже на хороший дизайн. - person Andreas; 03.09.2013
comment
Вы можете поместить его в подкласс и расширить каждое действие из этого нового подкласса. - person flx; 03.09.2013

если все ваши действия остаются открытыми в приложении, вы можете использовать это, и если приложение закрыто, isFinishing() будет вызываться в вашем onPause()

 @Override 
public void onPause() {        

        if(isFinishing()){
//code to finish() all activitys threads etc.....
}            

    super.onPause();
}
person JRowan    schedule 03.09.2013

Я обнаружил, что onDestroy и onCreate называются правильно, поэтому я отменил их.

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

person Andreas    schedule 03.09.2013

Вы можете сделать несколько вещей:

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

  2. Отслеживайте активную активность через этот синглтон и, когда никто не активен, останавливайте таймер.

person Chen Kinnrot    schedule 03.09.2013
comment
1. В моем тесте таймер продолжает работать. Я только запускаю MainActivity, а затем выхожу из него с помощью кнопки «Назад». Я продолжаю видеть отладочные сообщения в LogCat. Уничтожение приложения через Настройки->Приложения останавливает его. - person Andreas; 03.09.2013