Android QtService 不会在单独的进程上调用像 onCreate 这样的重写方法

Android QtService doesn't call override methods like onCreate on a separated process

我正在处理这个:

QMake version 3.1
Using Qt version 5.12.8 in /usr/lib/x86_64-linux-gnu
minSdkVersion 21
targetSdkVersion 29
Tested on two Android 10

当我 运行 android QtService 如果服务 运行 在 在 XML 定义中使用选项 android:process=":rs 分隔进程 。 Qt 库执行正确,因为我可以在 logcat 上看到调试信息,但如果我在 onCreateonStartCommand 上添加任何代码,它永远不会执行。

我的服务代码:

package net.altermundi.elrepoio

import android.app.ActivityManager
import android.content.Context
import android.content.Intent

import org.qtproject.qt5.android.bindings.QtService


class RetroShareServiceAndroid : QtService() {


    override fun onCreate() {
        System.out.println("salkmdsa onCreate")

        super.onCreate()
    }

    override fun onDestroy() {
        System.out.println("salkmdsa onDestroy")

        super.onDestroy()
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        System.out.println("salkmdsa onStartCommand")
        // Do some work
        return super.onStartCommand(intent, flags, startId)
    }

    companion object {
        fun start(ctx: Context) {
            ctx.startService(Intent(ctx, RetroShareServiceAndroid::class.java))
        }

        fun stop(ctx: Context) {
            ctx.stopService(Intent(ctx, RetroShareServiceAndroid::class.java))
        }

        fun isRunning(ctx: Context): Boolean {
            val manager = ctx.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
            for (service in manager.getRunningServices(Integer.MAX_VALUE))
                if (RetroShareServiceAndroid::class.java!!.getName().equals(service.service.getClassName()))
                    return true
            return false
        }
    }
}

正如我们在上面看到的,我添加了一些 println(打印行)执行。 如果 运行 在单独的进程中,则永远不会执行此代码或任何其他代码

我在 android 清单上的服务定义:

<service android:name=".RetroShareServiceAndroid" android:label="RetroShare Service" android:process=":rs> 

            <!-- Qt Application to launch -->
            <meta-data android:name="android.app.lib_name" android:value="retroshare-service"/>

            <!-- Ministro -->
            <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
            <meta-data android:name="android.app.repository" android:value="default"/>
            <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
            <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
            <!-- Deploy Qt libs as part of package -->
            <meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
            <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
            <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
            <!-- Run with local libs -->
            <meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
            <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
            <meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:plugins/bearer/libqandroidbearer.so"/>
            <meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidExtras.jar:jar/QtAndroidBearer.jar"/>
            <meta-data android:name="android.app.static_init_classes" android:value=""/>
            <!--  Messages maps -->
            <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
            <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
            <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
            <!-- Messages maps -->

            <!-- Background running -->
            <meta-data android:name="android.app.background_running" android:value="true"/>
            <!-- Background running -->
        </service>

这里就不贴Main了activity因为估计代码不相关,反正能找到here.

我能说自己傻吗?

我在 IDE 控制台上看不到 println 字符串,因为进程是分开的。

如果我使用 logcat 查看,我看到了它们。

结案