Как я могу определить, когда мое приложение работает? - PullRequest
4 голосов
/ 05 января 2010

У меня есть приложение, которое использует Службу для извлечения данных в фоновом режиме как во время работы приложения, так и когда это не так. Когда он не работает, я хотел бы показать уведомление, когда есть новые данные, но не когда приложение работает.

Как определить в моем сервисе, работает приложение или нет?

Ответы [ 7 ]

1 голос
/ 05 января 2010

Я думаю, вы хотите проверить, отображается ли определенное действие. Если это так, я бы использовал метод Activity.onCreate (), чтобы установить флаг в экземпляре приложения, то есть расширить класс Application полем «uiRunning» и проверить это поле в вашей службе. Функция onDestroy () должна быть использована для разблокировки атрибута. Не забудьте также использовать свой класс Application в файле Manifest.xml

.
0 голосов
/ 13 апреля 2011

Вот как я это сделал и работает без ошибок всего с несколькими строками кода:

В расширенном классе приложений:

public static boolean isAppInFront = false;

У вас основная деятельность:

@Override
public void onStart() {
    super.onStart();
    MyApplication.isAppInFront = true;
}

@Override
public void onStop() {
    super.onStop();
    if (isFinishing())
        MyApplication.isAppInFront = false;
}
0 голосов
/ 10 января 2010

Что я сделал, так это использовал флаг в своем сервисе, чтобы корневая активность устанавливалась и очищалась при onStart / onStop. Это работает очень хорошо.

0 голосов
/ 08 января 2010

Еще один способ добиться этого - отключить приемник данных от «службы», которая всегда будет работать в фоновом режиме. вы можете привязать ваше приложение к сервису и отобразить данные, полученные сервисом.

Проблема с приложением в фоновом режиме заключается в том, что Android убьет приложение, когда оно станет слишком старым. Всегда лучше иметь такое приложение, работающее в фоновом режиме, как сервис, а не активность.

0 голосов
/ 05 января 2010

Другим вариантом является реализация шаблона слушателя, и ваша служба должна управлять списком слушателей с помощью методов в интерфейсе службы для addListener () и removeListener (). Ваша активность может добавить себя в качестве прослушивателя после того, как она подключится к службе и удалит себя onStop () (т. Е. Когда приложение больше не будет видно пользователю или полностью завершит работу).

В вашем сервисе проверьте количество слушателей. Если слушателей нет, вы знаете, что должны создать свое уведомление.

0 голосов
/ 05 января 2010

Это очень легко. Вы используете названный Mutex.

Поместите это в приложение, которое вы хотите проверить:

bool createdNew;
Mutex mutex = new Mutex(true, @"Global\YourAppNameHere", out createdNew);
if (createdNew)
{
    var app = new YourProcess();
    app.run();
    mutex.Close();
}

Поместите это в приложение, которое проверяет, работает ли другое приложение:

bool createdNew;
Mutex mutex = new Mutex(true, @"Global\YourAppNameHere", out createdNew);
if (createdNew)
{
    Console.WriteLine("App not running");
    mutex.Close();
} else {
    Console.WriteLine("App is running");
}
0 голосов
/ 05 января 2010

Я согласен с использованием onCreate () / onDestroy () для одного приложения Activity, хотя для приложения с несколькими действиями было бы лучше использовать Application.onCreate () / onTerminate (), чтобы избежать запуска uiRunning состояние при переключении деятельности.

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