在 onDestroy 方法上执行最后一个方法 [Java] [Android]

Execute a last methode on the onDestroy methode [Java] [Android]

我有一个 MainActivity,它使用方法 ContextCompat.startForegroundService 启动前台服务作为意图。此服务有一个 paho MQTT 连接实例。

当我关闭应用程序时,我想在 MQTT 中发送最后一条消息来警告应用程序将要关闭,但这并不总是有效,即当我没有连接到我的计算机时使用 android 工作室调试器。

那么你有什么想法可以帮助我吗?

更多信息:

关于 MainActivity 的 onDestroy() 方法:

getApplicationContext().stopService(intent);

关于我的服务的 onDestoy() :

    client.published(client.GetTopic(),client.TAG_CLOSE);

    try {
        client.client.disconnect();
    } catch (MqttException e) {
        e.printStackTrace();
        Log.e("destroy service", "ERROR !!!!");
    }

编辑:我发现问题出现在我打开省电模式时。

onDestroy 方法和 onStop 方法都不能保证被调用。

There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it.

来源:https://developer.android.com/reference/android/app/Activity.html#onDestroy()

我相信这可能会因设备而异。在这种情况下,您观察到它是在节电选项打开时发生的,这可能是非常正确的。

至于解决方案,可以查看绑定服务,看看它们是否更适合您的场景:https://developer.android.com/guide/components/bound-services

保持坚强,快乐编码!

在 Kostek () 的帮助下,我找到了解决方案,将“REQUEST_IGNORE_BATTERY_OPTIMIZATIONS”添加到清单中,如下面的 post 所述: