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

使用onSaveInstanceState在Android应用程序中保持线程和连接状态?,android,bluetooth,android-lifecycle,Android,Bluetooth,Android Lifecycle,我正在为android开发一款多人游戏应用程序。 其中一名参与者充当主机(创建游戏实例的人),其他每个参与者都使用蓝牙连接到主机 我的问题如下,这个主机有一些线程在运行,以便通信并保存所有打开的连接。我已经读到我的活动可以临时销毁,以后再恢复,我应该使用onSaveInstanceState机制来实现这一点。然而,我说的是一个作为游戏“服务器”的应用程序,它有开放的连接和线程为其他客户端服务,如果操作系统决定破坏我的活动,这些连接和线程会发生什么?他们被终止了吗?如果是这样的话,为了正确实现这一

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

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

我查看了SDK附带的蓝牙聊天示例,因此没有处理onSaveInstanceState,因此不清楚应该怎么做

谢谢大家!

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

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

如何在onSaveInstanceState捆绑包上保持连接

你不能

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

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

如果我将所有这些状态保存在某个表示游戏状态的静态类中?如果我这样做,那么操作系统不会破坏我的线程/连接吗


请将您的服务器逻辑(线程、连接、服务器端游戏逻辑)放入Android服务。请使用
startForeground()
使该服务继续运行,并在运行过程中在状态栏中放置
通知
,以便用户能够轻松返回活动,从而停止您的服务。

谢谢。既然我是Android开发新手,那么让我们看看我是否能让你明白。我的应用程序中应该有一个服务类,负责连接和后台线程,以便与其他人通信和管理游戏。基本上,当你有一个应用程序使用蓝牙与另一个应用程序通信时,你的应用程序中必须有一个服务类,否则如果你的活动被破坏,这个连接就会丢失?还是有其他方法保持联系?如果没有,则bluetooth聊天示例会产生误导。@Eitan:“基本上,当你有一个应用程序使用bluetooth与另一个应用程序进行通信时,你的应用程序中必须有一个服务类,否则,如果你的活动被破坏,此连接将丢失?”--我不能专门与bluetooth交谈。但是,一般来说,您希望您的活动在被破坏时将所有内容清理干净。否则,你的用户会因为你浪费CPU、电池等而在市场上给你一颗星的评级。@Eitan:“如果没有,那么蓝牙聊天示例就非常误导。”——你是说这个吗?使用服务维护
BluetoothSocket
的示例?我同意活动在销毁时必须清除所有内容,但是,据我所知,操作系统正在暗中销毁活动,而不仅仅是在用户关闭它时。例如,如果显示器从宽屏切换到普通屏幕,反之亦然。如果您在同时运行其他应用程序时将应用程序移动到后台一段时间,则可能会出现这种情况。在这两种情况下,正在进行的游戏不应该被破坏,特别是如果你是主人的话。这就是为什么我知道我不能依靠活动生命周期来主持比赛。是的,我刚才说的就是这个例子。我在其中没有看到任何服务实现,有一个名为BluetoothChatService的类,但它不从服务类扩展,也不包含服务生命周期方法。它是驻留在BluetoothChat活动中的对象实例,因此如果隐式销毁此活动,BluetoothChatService实例将丢失。我当时是否误解了你所说的服务?它不需要是扩展服务类的类?或者这个例子中有什么东西让我无法理解?