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/

相关文章:

android - 如果在 Android 中不再可见,则 Activity 被系统杀死的问题

android - 弹出窗口中的ListView

javascript - setSupportMultipleWindows 和 setJavaScriptCanOpenWindowsAutomatically 不允许弹出 webView

java - Android 无法生成 View 绑定(bind) com.sun.tools.javac.code.Symbol$CompletionFailure :

java - Job Scheduler 有时不会被触发

java - JSON解析性能慢

android - 在数据库更改 Android 时得到通知

java - 将字符串转换为 JSON 并获取值

java - 为什么公共(public)类在 android 开发人员滑动 View 示例中的同一个文件中?

android - 发送广播 ConnectivityManager.CONNECTIVITY_ACTION