它总是看起来像某种黑魔法,就像其他应用程序始终保持其服务一样,但每次都会被系统杀死。
我的应用应该保持TCP套接字对服务器开放,并在数据可用时发送/接收数据,因此必须始终保持开启状态。
这是我到目前为止所尝试的:
1)使用此行在另一个进程中运行服务(还有一个额外的行stopWithTask):
android:process="package.name.custom_process_name"
android:stopWithTask="false"
2)调用这些方法时重新启动服务:
onTaskRemoved()
onDestroy()
3)将return START_STICKY
添加到onStartCommand()
方法
4)检查这些事件发生时服务是否仍在运行:
android.net.wifi.WIFI_STATE_CHANGED
android.net.conn.CONNECTIVITY_CHANGE
- 如果设备不再具有互联网连接,我将停止与服务器的套接字连接,并在连接时重新打开它。
然而,我的服务总是被系统随机杀死(有时几小时后,有时几天后),并且在我重新打开应用程序之前不会自动重启。
其他应用程序(例如聊天应用程序)如何始终保持其服务的可用性?
P.S。:持续通知将是最少的选项。
答案 0 :(得分:0)
当您的服务使用onDestroy()
销毁创建闹钟时,覆盖服务中的AlarmManager
。当警报触发器再次启动您的服务时。
第二种方式不推荐或正确的方式,但创建一个单独的服务AlwaysAliveService
,它将什么都不做,但将在Android系统中保持可用。