android - 在 Android 中保持服务器连接

标签 android singleton client-server android-context orientation-changes

我目前在我的 Android 应用程序中遇到了一些架构问题,而且我很难找到解决这些问题的“Android 方式”。

该应用程序只是网络服务器的客户端。应用程序需要连接到 Web 服务器,这可以通过几种不同的协议(protocol)来完成,这需要花费很多时间来设置。

该应用程序让 Android 处理例如设备旋转,并且当旋转设备时,应用程序不能重新连接到服务器。

这与应用程序中的其他类似问题密切相关,因此我想回答我的一些问题。

  • 方向改变后是否保留了单例对象?从一项 Activity 切换到另一项 Activity 后?从应用程序到另一个应用程序进行多任务处理后?持续多长时间?
  • 存储在 Application 类中的对象在方向更改期间是否保留?
  • 如果我的 Android 应用程序中有一项服务(可以说它全天候运行 24/7),应用程序对象是否全天候 24/7 Activity ? (我问这个问题是因为我想在 Application 对象中有服务器连接单例。)
  • 您能否将自己的对象存储在 Context 或 Application Context 中?有什么不同?这可以以某种方式用于服务器连接吗?或者应该在什么时候使用?

请随意回答部分或全部问题!谢谢

最佳答案

Is a Singleton object retained after Orientation Changes? After switching from one activity to another? After multitasking away from the app to another? And for how long?

单例对象保留在内存中,直到其进程处于 Activity 状态。当用户关闭手机或打开另一个消耗大量资源的应用程序时,它可能会被杀死。 但是在配置更改和 Activity 切换时,单例保持不变。您可以覆盖您的应用程序类并在那里创建您的单例对象。

Are objects stored in the Application class retained during an orientation change?

不,应用程序类不会在应用程序的整个生命周期中保留。

If I have a service in my Android application (Lets say that it runs for 24/7), is the Application object alive 24/7 ? (I ask this question because I want to have the server connection singletons in the Application object.)

当系统需要更多资源时,系统也可能会重新启动服务。但是您可以使用 START_STICKY 开始服务标志,它将由系统重新启动。但是您可以使用 startForeground 开始服务命令,它重新启动的机会几乎为零。但是那样的话,您需要在服务运行时显示特殊通知。例如,作为音乐应用程序。

Can you store your own objects in the Context or Application Context? What is the difference? Could this be used in some way for server connection? Or when is it supposed to be used?

对不起,我不知道。当然,您可以将对象存储在 Application 类的实例中,但它们也会随应用程序一起保留。

我建议您使用服务(我在我的应用程序中这样做)。如果您的应用程序通常要显​​示有关您的连接的通知,您当然可以使用 startForeground()。如果没有,您可以将服务作为单独的进程启动(使用 AndroidManifest.xml 中的 android:process 选项)。但是你需要小心地在应用程序和服务之间发送数据。如果这两种变体都不适合您 - 使用简单的服务。具有服务的应用程序具有更高的实时优先级。

关于android - 在 Android 中保持服务器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30667197/

相关文章:

angular - 跨所有组件共享模态

singleton - Dagger 2 - 如何创建/提供 EagerSingleton

c++ - 使用 openam 或 opensso union c++ 客户端应用程序

带有第三方 OAuth2 的 REST 服务

android - 任务 ':app:kaptDebugKotlin' 执行失败

C++:单例的替代品

java - 如何更改 JitPack 中的版本?

c# - 为服务器应用程序使用 3 个端口是否明智?

android - Ok.ru 与 ios 的集成 - 重定向 URI 错误

java - 通过可能的对话框向用户提供前台下载