假设我有一个Activity,当用户按下按钮时,使用startService()
启动服务。当用户按下另一个按钮时,使用startService()
中的另一个意图停止服务,或者它可以决定自行停止。该服务希望永远运行,因此它从START_STICKY
返回onStartCommand()
。在服务运行时,它连接到某个服务器并接收消息。 Activity绑定到它,绑定时显示这些消息。
现在,当OOM终止后启动Activity时,它不知道服务是否已启动。可以使用onStartCommand()
中设置的静态字段来判断服务是否正在运行,但这种情况迟早会适得其反。此外,在活动启动后,系统可以启动服务,因此使用静态字段根本不是一个选项。
我能想出的最干净的解决方案是使用SharedPreferences来存储服务的状态。当服务在SharedPreferences.setBoolean("running", false)
和stopSelf()
之间被杀死时,这将不会很好,但这样的事情可能很少发生。
此外,我可以尝试始终绑定到服务。这将是非常丑陋的,但仍然不是不可能。
还有其他解决方案吗?也许这个想法在某种程度上是错误的?