用于服务器连接优化的 Android Activity 生命周期

Posted

技术标签:

【中文标题】用于服务器连接优化的 Android Activity 生命周期【英文标题】:Android Activity Lifecycle for Server Connections Optimization 【发布时间】:2021-04-16 07:16:22 【问题描述】:

我正在开发一个将聊天作为迷你功能的应用。我有两个聊天屏幕,一个用于对话列表,我们称之为 ActivityA,另一个用于实际消息发送和阅读,我们称之为 ActivityB 。问题是我的聊天服务器只能处理有限数量的并发打开连接。因此,为了优化连接,我尝试仅在用户处于任何聊天屏幕时进行连接,并在聊天屏幕消失后立即断开连接,即 stoped。为此,我尝试使用 Activity 的生命周期方法 onStartonStop。我在 onStart 上连接并在 onStop 上断开连接。问题是 onStop ActivityAActivityBonStart 之后被调用>。因此,当用户登陆 ActivityB 时,连接将被关闭,并且无法发送任何消息。 请问如何解决这个问题?

【问题讨论】:

已移除标签 android-studio,因为该标签用于处理与 Android Studio 产品相关的问题。您的问题是一个通用的 Android 问题。 【参考方案1】:

解决此问题的更好方法是使用全局状态。即:连接到服务器一次并在两个活动中使用相同的连接。这可以使用Application 类来完成。有关更多详细信息和示例,请参阅此Link。

但基本上会发生的是globalState(可以是任何名称)内的连接对象,您可以从ActivityAActivityB 访问它。这样您就不必再次连接到服务器了。

【讨论】:

我认为这不能解决 OP 的问题。他想减少连接到服务器的客户端数量,因此他不希望客户端连接,除非用户实际使用他的应用程序。即使用户没有使用应用程序(即:后台应用程序),您的解决方案也会让每个客户端永久连接到服务器。 是的,您确实有一点,但 OP 的问题是根据活动打开和关闭连接,使用我的回答,无论活动如何,他都可以使用相同的连接。但正如您所说,他必须在不再需要时手动关闭连接。【参考方案2】:

您可以在onResume()onPause() 中进行连接/断开连接。这些也将在每个Activity 中调用,因此为了避免破坏事情,如果在合理的时间内调用onResume(),我会延迟断开连接并取消它。像这样的:

onPause():

安排Runnable 在 500 毫秒内断开连接

onResume():

取消任何断开连接Runnable 连接到服务器

【讨论】:

以上是关于用于服务器连接优化的 Android Activity 生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Ambiguous method call. Both findViewById (int) in AppCompatActivity and findViewById (int) in Activi

centos中,内核优化。适合用于优化WEB服务器等TCP/IP连接多的服务器

Android Socket通讯 之 表情列表优化业务逻辑优化

Android Socket通讯 之 表情列表优化业务逻辑优化

Android Socket通讯 之 表情列表优化业务逻辑优化

Netty 实现长连接服务的难点和优化点