android - 远程服务有多糟糕?

标签 android

我正在考虑在我的应用程序中使用远程服务,但我在 CommonsWare 的答案中看到 this thread (和其他线程)似乎远程服务有许多缺点/担忧,例如浪费 CPU、内存和电池生命周期。这让我犹豫不决。所以我想先让这里的专家来运行我的想法:

问题 #1:鉴于我的应用程序(如下),您认为使用远程服务是一个坏主意吗?或者,这是正确的方法吗?

我的应用程序有两个部分,一个在 PC 上运行的 Wi-Fi 客户端,一个在 Android 上运行的 Wi-Fi 服务器。它们通过 Socket 来回传输位于 SD 存储卡中的应用程序数据文件。 Android 应用程序有超过 48,000 行代码,我想说相当大。当它启动时,它会自动启动该服务。然后,该服务创建一个单独的线程,该线程调用 ServerSocket.accept() 来监听线路。即使 Android 应用程序未运行,用户也可以按 PC 上的按钮启动文件传输。

我了解服务的生命周期独立于 Activity ;我不介意用户是否可以通过“设置”杀死应用程序和服务——他杀死了它,他必须再次启动应用程序才能启动服务器。他选择杀死它,他会自己开始。

但是如果 Android 系统在用户不知情的情况下杀死了该进程怎么办?在这种情况下,用户不知道 Wi-Fi 服务器已失效,当他单击 PC 上的按钮时,他会收到错误消息。因此,我希望即使进程被系统杀死,服务器也能继续运行。因此,我认为远程服务就是答案。或者,是吗?

问题#2:如何在应用程序和远程服务之间建立简单的单向通信?

两者之间的唯一通信是应用程序需要知道服务的状态,例如它是否正在监听 Socket,或者是否仍在运行等。如果停止运行,用户可以从应用程序的 UI 重新启动它。

我不想使用AIDL,它似乎有点大材小用;全局变量不起作用,因为它们不在同一个进程空间中;即使 Application 单例似乎也不起作用。所以现在我正在考虑使用共享首选项,或者在内部存储中创建一个文件。我还没有时间尝试这些想法,但它们有用吗?如果没有,还有更好的想法吗?

感谢您阅读本文!

最佳答案

  1. 远程服务与普通服务类似。唯一的区别(我猜)是它可以从其他应用程序和服务访问(它是导出的服务)。因此,如果您希望多个应用程序能够访问您的服务,那么您可以将其设置为远程服务。但就你而言,我认为你可以为你的应用程序提供一项服务。为了保持服务运行,您应该查看前台服务。它们是普通服务,它们只是通过命令 startForeground 启动的,这些服务 Android 系统会尝试尽可能长时间地保持运行。

  2. 实际上,就您而言,这不是单向的。您向您的服务询问有关状态的信息,服务应该询问。如果您不选择远程服务,那么在您的应用程序中您可以只调用服务方法( extending Binder class )。对于远程服务,我认为您可以使用两个 Messenger 或 AIDL。

关于android - 远程服务有多糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920343/

相关文章:

java - 来电号码先减零

android - 粒子效果不渲染

android - 使用 Room 时如何手动调用 CREATE TABLE?

android - 如何填补7段字符每段之间的空白

android - 为什么我的标记信息窗口显示在另一个标记上?

android - Jacoco测试报告显示覆盖率为0。执行数据不匹配

android - 如何在 android 中使用可视化图 TableView 录制音频?

android - ScrollView 内的可扩展 ListView

android - 如何在android中的webview上加载网页?

android - 处理具有几乎相同核心功能的类似应用程序的最佳方法是什么?