如何让android服务始终运行?

时间:2017-01-14 12:15:42

标签: android sockets service background-process

它总是看起来像某种黑魔法,就像其他应用程序始终保持其服务一样,但每次都会被系统杀死。

我的应用应该保持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。:持续通知将是最少的选项。

1 个答案:

答案 0 :(得分:0)

当您的服务使用onDestroy()销毁创建闹钟时,覆盖服务中的AlarmManager。当警报触发器再次启动您的服务时。

第二种方式不推荐或正确的方式,但创建一个单独的服务AlwaysAliveService,它将什么都不做,但将在Android系统中保持可用。