Добрый день, ув. форумчане!
Разбираюсь с запуском служб Android в Qt. Делаю согластно документации: https://doc.qt.io/qt-5/android-services.html
Служба стартует вызовом QAndroidJniObject::callStaticMethod, статического метода в классе наследуемом от QtService:
// DemoService.java
public class DemoService extends QtService
{
public static void startDemoService(Context ctx) {
Intent intent = new Intent(ctx, DemoService.class);
ctx.startService(intent);
}
}
Компилирую в одну общую библиотеку .so. В документации сказано:
Qt loads the .so file defined in android.app.lib_name meta-data, and calls the main function with all the arguments set in android.app.arguments meta-data.
Т.е. точкой входа для службы служит int main(int argc, char *argv[]). Однако, в действительности, main вызывается только один раз для активности, а для сервиса - нет. И тем не менее, сам сервис успешно запускается и продолжает работать.
Вот еще пример на Stack Overflow: https://stackoverflow.com/questions/48963731/qtservice-automatically-restarts-on-android-after-running-the-application
// Вызывается только один раз
int main(int argc, char** argv){
// Работает
//GUI
if(argc <= 1){
QGuiApplication app(argc, argv);
qInfo() << "Service GUI starting...";
...
}
// Не работает!
//Service
else if(argc > 1 && strcmp(argv[1], "-service") == 0){
QAndroidService app(argc, argv);
qInfo() << "Service starting...";
...
}
}
Почему при запуске службы Android не вызывается main (хотя, сама служба успешно стартует)? Что я делаю не так? Или что-то не правильно понимаю?
OS: Debian 9; Qt: 5.14.1; Android: 7.0