Документация
ОС Аврора 5.2.0

Фоновые задачи

Каждое приложение знает свой backroundTaskID и никуда его не передаёт. onTaskStarted выполняется только если backroundTaskID будет совпадать со значением, зарегистрированным в desktop-файле приложения ([X-Task PushWorker]). Для данного случая это PushWorker. backroundTaskID задаётся в desktop-файле как [X-Task backgroundTaskId].

Подробнее о конфигурации .desktop-файла для push-уведомлений можно прочитать в разделе Дополнительные настройки конфигурации.

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

#include <RuntimeManager/RuntimeDispatcher>
#include <RuntimeManager/Task>

int main(int argc, char *argv[])
{
    auto application = Aurora::Application::application(argc, argv);
    RuntimeDispatcher *dispatcher = RuntimeDispatcher::instance();
 
    // Если бинарный файл запустился для фоновой задачи
    dispatcher->onTaskStarted(QStringLiteral("PushWorker"), [&application](const QString &taskID) {
            QStringList applicationArguments = application->arguments();
            // код, который должен исполняться в фоновой задаче
            // ...
    });
 
    //бинарный файл запустился для приложения
    dispatcher->onApplicationStarted([&application]() {
        QStringList applicationArguments = application->arguments();
        
        // ...
    });
    return application->exec();
}

Используется Aurora::PushNotifications::Client — клиента для системы push-уведомлений:

Application::Application(QObject *parent)
    : QObject(parent),
      m_client(new Aurora::PushNotifications::Client(this))
{
    connect(m_client, &Aurora::PushNotifications::Client::registrationId, this, &Application::processRegistrationId);
    connect(m_client, &Aurora::PushNotifications::Client::registrationError, this, &Application::processRegistrationError);
    connect(m_client, &Aurora::PushNotifications::Client::notifications, this, &Application::processNotifications);
    connect(m_client, &Aurora::PushNotifications::Client::clientInactive, this, &Application::handlePushClientInactivity);
    connect(m_client, &Aurora::PushNotifications::Client::pushSystemReadinessChanged, this, [this](bool status) {
        qDebug() << "Push system is" << (status ? "available" : "not available");
    });
}

Примечание. Данный класс Application не связан с пространством имён Aurora::Application из библиотеки libauroraapp. Application — это отдельный класс для работы с фоновыми задачами.

Если бинарный файл запускается как фоновая задача:

dispatcher->onTaskStarted(backroundTaskID, [&application](const QString &taskID) {
        qDebug() << "Background application task is running taskID=" << taskID;
        QStringList applicationArguments = application->arguments();
        auto pushExample = new Application(application);
        pushExample->startAsTask(applicationArguments);
    });
return application->exec();

Приложения, не поддерживающие работу с фоновыми задачами, должны обрабатывать аргументы командной строки и запускать gui только в случае, если не был указан аргумент /no-gui. Метод startAsApp(const QStringList &arguments) отправляет сигнал о том, что нужно открыть графический интерфейс:

dispatcher->onApplicationStarted([&application]() {
    QStringList applicationArguments = application->arguments();
    // ...
    auto pushExample = new Application(application);
    pushExample->startAsApp(applicationArguments);
    // ...
});

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.