Я сам еще не пробовал, но думаю, что сработает следующее.
- Создайте свой собственный класс Activity, который
extends Activity
(как предложено в этом вопросе SO ).
- Убедитесь, что все ваши действия расширяют ваш пользовательский класс Activity.
- @ Переопределить метод
onStop()
(согласно документам по жизненному циклу Activity ).
- Попросите
onStop()
вызвать метод утилит ниже (код, основанный на проекте Droid-Fu ), чтобы выяснить, находится ли ваше приложение в фоновом режиме.
Меня беспокоит, что могут быть некоторые временные окна, когда ваша последняя активность закрывается до того, как запустится ее новая активность (в том числе и в вашем приложении), но, надеюсь, этого можно избежать.
public static boolean isApplicationInBackground(Context context)
{
ActivityManager am =
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty())
{
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName()))
{
return true;
}
}
return false;
}
Дайте нам знать, как вы поживаете, так как мне может понадобиться реализовать и эту функцию!
Обновление: Я провел небольшое быстрое тестирование этого кода.
Кажется, что он работает нормально при нажатии клавиши «Домой» для выхода из приложения, поскольку на моем устройстве текущее задание изменяется на ComponentInfo{com.motorola.blur.home/com.motorola.blur.home.HomeActivity}
. Однако код не определяет приложение как фоновое при использовании кнопки «Назад» для выхода из приложения (он по-прежнему считает, что мое приложение работает).
Этот сценарий может быть обнаружен путем переопределения onDestroy()
в ваших действиях верхнего уровня и проверки isFinished()
, чтобы подтвердить, что приложение уничтожается (а не воссоздается действие, например, для изменения ориентации).