如何使后台服务作为一个单独的进程运行?

时间:2011-12-13 04:39:25

标签: android

我们已经开发了一个Android应用程序,它将发送请求并从服务器接收响应,并根据它将更新UI的响应。此应用程序处理许多不同类型的请求,它将发出以及显示状态栏上的服务器状态。 这个应用程序有大约50多个不同的活动,一个服务处理所有请求/响应以及绑定到此服务的所有活动,因此无论谁发送请求,他将与服务绑定并发送请求并获得响应。

现在我们面临的问题是因为我们添加了如此多的请求/响应,因为服务似乎变得更加过载,所以显然应用程序也变得非常慢。 所以我们决定将服务作为单独的进程,包括android:清单文件中的服务进程,并尝试为此实现AIDL。 但它并不那么容易,因为每个活动都与服务建立连接,并使用Service register()方法将textView,handler,activity发送到服务。 所以我们不能去AIDL,因为AIDL只支持基本类型。 所以我的怀疑是:

1 的。我们可以将服务作为单独的流程进行,它应该在同一个应用程序中并与同一个apk打包在一起吗? 2 的。当我们实现AIDL时(据我所知AIDL仅支持原始类型),如何处理上面提到的上述情况,其中活动依赖于服务并将一些对象传递给服务和服务更新这些对象和活动使用它)?

3 的。 Activity使用服务的一些成员变量,所以如果我们更改为AIDL如何使用这些成员变量(这些成员变量是自定义对象)?

我尽力用一些例子来解释这个问题,所以请给我一些有价值的信息。

此致 皮克斯。

1 个答案:

答案 0 :(得分:2)

是否绝对有必要发送对文本视图的引用?听起来像添加android:process=":remote"应该做你想要的,但如果你在另一个进程中运行服务,我认为你不应该尝试传递UI引用。您是否可以根据服务的响应更新文本视图?

如果您不允许其他应用程序访问,您只需使用此处所述的活页夹http://developer.android.com/guide/developing/tools/aidl.html

这是我们通过传递对象列表所做的工作而且效果很好。