2014-01-15 3 views
0

Фон: Я выгружаю некоторые данные из класса Application и сохраняю их в файлах через короткий промежуток времени или когда приложение переходит в фоновый режим (например, когда пользователь нажимает кнопку «Домой» или кнопку переключателя задач). Я не хочу использовать onPause() класса Activity, потому что в приложении много действий, я должен проверить onPause() для всех из них. И onPause также вызывается, когда я перехожу от одного действия к другому в своем приложении (что создает ненужное действие сохранения).Android, отслеживать, когда приложение переходит на задний план

Вопрос: Существует ли универсальное событие, когда приложение переходит в фоновый режим, независимо от того, в каком виде оно находится?

Благодаря

ответ

1

Проверьте код ниже непрерывно означает, вы можете использовать класс Timer.

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<RunningTaskInfo> runningTasks = null; 
try { 
    runningTasks = activityManager.getRunningTasks(1); 
} catch (Exception e) { 

} 
RunningTaskInfo runningTaskInfo = runningTasks.get(0); 
ComponentName topActivity = runningTaskInfo.topActivity; 
if(topActivity.getPackageName().equals(your packagename)){ 
    S.o.p("fine");} 
else{ 
    S.o.p.("application sent to background");} 
+0

Спасибо, это действительно хороший способ отслеживать состояние вашего приложения, но активно, а не пассивно получать событие. Похоже, что нет другого ответа. –

0

onStop() вызывается, когда деятельность скрыта от глаз, то есть пользователь нажал кнопку домой. onPause() используется, только если Activity скрыт, то есть частично виден из-за некоторого перекрытия. Конечно, onPause() вызывается непосредственно перед вызовом onStop(). Вы можете увидеть весь жизненный цикл на Android Developers. Я бы посоветовал вам работать с жизненным циклом, а не против него. Сохраняйте данные при изменении состояния.

Для планового хранения данных я предлагаю вам использовать таймер. Когда вы передаете все данные в контексте приложения, и вы можете жить с меньшим количеством точек восстановления, я бы предложил сохранить дату в вызове onDestroy(). Если нет, я предлагаю реализовать TimerTask для планирования регулярных сериализаций ваших данных.

Чтобы ответить на ваш вопрос, нет! Это просто не Android, чтобы рассматривать ваше приложение в целом и иметь один жизненный цикл. У вас есть один жизненный цикл для каждой деятельности, и все действия связаны друг с другом стеком и их соответствующими жизненными циклами.

+0

tks для вашего наконечника в хранилище данных. Вернемся к 'onStop()', ваше решение также привязано к классу Activity, а не к Application. Это не то, что я хочу, потому что я сказал, что есть так много действий, если я использую это, я должен вводить этот код для каждой функции onStop(). –

+0

Вы можете расширить 'Приложение' и использовать этот класс в качестве своего контекста. http://developer.android.com/reference/android/app/Application.html Однако имейте в виду, что класс не может реагировать на тот же жизненный цикл, что и действия. Возможно, вы можете играть с 'registerActivityLifecycleCallbacks()', но у меня нет опыта с ним. Запланированный таймер, кажется, ваш лучший выбор, поскольку вы хотите приурочить исполнение. – Eric

+0

Tks для вашего наконечника. Да, я сохраняю по расписанию, но я пытаюсь предотвратить плохое, что происходит между сберегающими точками, поскольку пользователь может переключиться на другое приложение, и мое приложение было убито из-за низкой памяти. Во всяком случае, я могу попробовать метод, который вы упомянули. –

Смежные вопросы