【发布时间】:2012-01-19 17:52:57
【问题描述】:
我正在考虑在我的应用程序中使用远程服务,但我在 CommonsWare 在this thread(和其他线程)中的回答中看到,远程服务似乎有许多缺点/问题,例如浪费 CPU、内存和电池寿命。这让我犹豫了。所以我想先在这里的专家那里运行我的想法:
问题 #1: 鉴于我的应用程序(如下),您认为使用远程服务是个坏主意吗?或者,这是正确的方法?
我的应用程序有两个部分,一个在 PC 上运行的 Wi-Fi 客户端,一个在 Android 上运行的 Wi-Fi 服务器。它们通过 Socket 来回传输位于 SD 存储卡中的应用程序数据文件。 Android 应用程序有超过 48,000 行代码,我会说相当大。当它启动时,它会自动启动服务。然后该服务创建一个单独的线程,该线程调用ServerSocket.accept() 来在线监听。即使 Android 应用程序未运行,用户也可以按下 PC 上的按钮来启动文件传输。
我了解服务的生命周期独立于活动';我不介意用户是否可以通过设置杀死应用程序和服务——他杀死了它,他必须再次启动应用程序才能启动服务器。他选择杀死它,他会自己动手。
但是,如果 Android 系统在用户不知情的情况下终止了进程怎么办?在这种情况下,用户不知道 Wi-Fi 服务器已死,当他单击 PC 上的按钮时会收到错误消息。因此,即使进程被系统杀死,我也希望服务器继续运行。因此,我认为远程服务就是答案。或者,是吗?
问题#2:如何在应用和远程服务之间建立简单的单向通信?
两者之间的唯一通信是应用程序需要知道服务的状态,例如它是否正在侦听 Socket,或者它是否仍在运行等。如果死了,用户可以从应用程序的 UI 重新启动它。
我不想使用 AIDL,这似乎有点矫枉过正;全局变量不起作用,因为它们不在同一个进程空间中;即使Application 单例似乎也不起作用。所以现在我正在考虑使用共享首选项,或者在内部存储中创建一个文件。我还没有时间尝试这些想法,但它们会起作用吗?如果没有,有更好的想法吗?
感谢您阅读本文!
【问题讨论】:
标签: android