У меня есть приложение Qt Android со службой, реализованной с использованием QtService. Если я хочу выйти из службы, я делаю это так:
В C ++:
QtAndroid::androidService().callMethod<void>("quit");
В Java служба:
public void quit() {
stopSelf();
}
Затем появляется функция onDestroy:
@Override
public void onDestroy() {
Log.d("MyService", "Called onDestroy");
super.onDestroy();
}
Сообщение журнала никогда не отображается, и я предполагаю, что функция onDestroy не вызывается. В моем приложении служба даже не остановлена. Я попробовал минимальный пример, основанный на этом руководстве . В этой минимальной реализации служба остановлена, но функция onDestroy также не вызывается.
Чтобы продемонстрировать проблему, я взял пример исходного кода и изменил его следующим образом:
server. cpp
#include <QAndroidService>
#include <QtAndroid>
#include "rep_pingpong_source.h"
class PingPong : public PingPongSource {
public slots:
// PingPongSource interface
void ping(const QString &msg) override {
qDebug() << "KDAB: Message "+msg;
emit pong(msg + " from server");
if (msg == "Quit") {
qDebug() << "MyService: C++ quit";
QtAndroid::androidService().callMethod<void>("quit");
}
}
};
int main(int argc, char *argv[])
{
QAndroidService app(argc, argv);
QRemoteObjectHost srcNode(QUrl(QStringLiteral("local:replica")));
PingPong pingPongServer;
srcNode.enableRemoting(&pingPongServer);
return app.exec();
}
MyService. java
// java file android/src/com/kdab/training/MyService.java
package com.kdab.training;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import org.qtproject.qt5.android.bindings.QtService;
public class MyService extends QtService
{
public static void startMyService(Context ctx) {
ctx.startService(new Intent(ctx, MyService.class));
}
@Override
public void onDestroy() {
Log.d("MyService", "Called onDestroy");
super.onDestroy();
}
public void quit() {
Log.d("MyService", "Called quit");
stopSelf();
}
}
Если я проверю журнал, Вызывается Quit сообщение появляется но Called onDestroy никогда. У вас есть идея, почему это происходит и как я могу отладить поведение? Кроме того, что может быть причиной того, что мой сервис не остановится? Как я могу узнать, что мешает ему выйти?
Спасибо!