在 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 所述:
我有一个 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 (