使用onSaveInstanceState在Android应用程序中保持线程和连接状态?

时间:2010-11-06 09:25:37

标签: android bluetooth android-lifecycle

我正在为Android开发一款多人游戏应用程序。 其中一个参与者充当主持人(创建游戏实例的人),其他每个参与者都使用蓝牙连接到主机。

我的问题如下,该主机有一些线程正在运行,以便进行通信并保存所有打开的连接。我已经读过我的活动可以暂时销毁并稍后恢复,我应该使用onSaveInstanceState机制。但是,我说的是一个充当游戏“服务器”的应用程序,它有开放的连接和服务于其他客户端的线程,如果操作系统决定破坏我的活动,这些连接和线程会发生什么?他们被终止了吗?如果是这样,为了正确实现这一点,推荐的模式是什么,如何在onSaveInstanceState包上保持连接?它不可序列化。线程也一样,我需要在销毁时重新创建并销毁它们,并且当活动恢复时?如果我在一个代表游戏状态的静态类中保持所有这种状态?如果我这样做,操作系统会不会破坏我的线程/连接吗?

我查看了SDK附带的示例蓝牙聊天,因此我没有处理onSaveInstanceState,所以我不知道该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:7)

  

如果操作系统决定破坏我的活动,这些连接和线程会发生什么?

如果您在活动中创建了这些线程,最好停止这些线程,否则会泄漏它们。

  

如何在onSaveInstanceState包上保持连接?

你不能。

  

线程也是如此,我是否需要在销毁时和活动恢复时重新创建并销毁它们?

如果他们是由活动开始的,那么,是的,请。

  

如果我在一个代表游戏状态的静态类中保持所有这种状态?如果我这样做,操作系统会不会破坏我的线程/连接吗?

请将您的服务器逻辑(线程,连接,服务器端游戏逻辑)放入Android服务中。请使用startForeground()保持该服务的运行,并在状态栏中放置Notification,以便用户可以轻松地返回允许他们停止服务的活动。