3

我有一个Service应该保持与服务器的永久连接以便接收通知。对我的应用程序来说,按时从服务器获取消息至关重要。

我无法使用 GCM Push,因为连接将在本地网络中,并且手机可能没有任何互联网连接。我也知道在服务中保持永久连接的电池问题,但我会让用户选择此选项并通知他/她潜在的电池消耗(实际上,当设备始终处于相同状态时,该功能主要有意义连接到电源的地方)。我也知道Android系统可以随时杀死我的Service,甚至用户可以使用任务杀手来摆脱当时正在运行的所有服务。

话虽如此,我想过使用AlarmManager定期检查我是否Service正在运行并重新启动它以防万一。我不相信这个选项,因为服务器可以在服务被杀死但尚未由AlarmManager.

我的问题基本上是是否有更好的策略来确保我按时收到消息?

到目前为止,我能找到的所有相关信息都代表避免使用永久服务并使用其他东西,但由于我的用例的性质,我没有其他选择。

4

2 回答 2

2

您可以查看在任意数量的设备广播(如 wifi 连接状态和启动)上设置广播接收器;

<receiver android:name=".receivers.BootReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <receiver android:name=".receivers.WifiReceiver">
        <intent-filter>
            <action android:name="android.net.wifi.STATE_CHANGE" />
        </intent-filter>
    </receiver>
于 2013-04-29T09:44:20.883 回答
1

将您的服务设置为前台服务(请参阅this)。Android 只会在极端情况下终止该服务。如果服务意外崩溃,您仍然可以将警报管理器用作“安全网”来重新启动服务。这是你能做的最好的。没有什么是100%的。

于 2013-04-29T10:04:52.093 回答