2011-10-06 202 views
2

假设您有一个在Android设备上生成本地HTTP服务器的应用程序。Android:独立线程与独立应用程序

在单独的应用程序中运行它而不是产生单独的线程会有什么好处吗?

由于堆大小限制在应用程序,我假设运行单独的应用程序时有更多的内存呼吸空间。

除此之外,根据性能是否还有其他好处(或缺点),如更大的CPU时间块?

+0

线程在Android是http://developer.android.com/reference/java/lang/Thread.html,但你是什么应用* *是什么意思? –

+0

单独的.apk进程。 –

+0

“生成本地HTTP服务器的应用程序”。除了产生服务器之外,应用程序还有什么功能?应用程序的其余部分如何与服务器通信? –

回答

1

的一个大缺点我看到运行在不同的线程应用程序组件时发生的这两个部分将在不同的DVM的。这可以使共享首选项更改,监听器,观察者等等不能像预期的那样工作,您还必须确保所有数据库访问都是同步的。

,如果你正确地同步,不需要的喜好,你可以使用捆绑或AIDL从2个应用程序来回沟通解决这个问题。最好的选择是用于双向连续通信的AIDL,但要注意AIDL可能很昂贵。通信的另一种选择是套接字...但这与所提供的SDK不一致。我在做这件事时学到的一个技巧是创建一个API jar文件,以包含将处理所有通信的应用程序(通过intent或AIDL - blackbox方法)。

我个人认为都差不多应该留在同一个DVM和应用程序组件,除非他们可以运行的独立,那么你必须成为法官。

你有没有关于如何运行HTTP服务器上的正在进行的前台服务?这样可以解开你的设计,让事情变得简单轻松。

0

SDK中有一个remote service示例。

如果你有两个应用程序,你绝对需要远程服务。就像我的经验一样,这只是在应用程序之间进行沟通的方式。

从我的角度来看,这是不好与被手机所使用的概念“服务器”。但也许你有你的理由...

+3

“如果您使用两个应用程序,则绝对需要远程服务。” - 这是不正确的。 “这是在应用程序之间进行通信的唯一途径” - 这是不正确的。 – CommonsWare

+0

@CommonsWare,谢谢,我明白......这是错误的。 – 2012-03-21 23:39:32

1

使用单独的进程可以显着增加应用程序的内存占用量。您不仅可以获得多个Dalvik核心开销(每个进程2-3MB),还可以共享应用程序使用的任何RAM(例如代码中的静态符号等)。

另外,你有更多的CPU开销,因为你现在需要为跨越边界您的应用程序的不同部分之间的任何交互做IPC。而且你在实现中有更多的复杂性,因为实际上你需要实现IPC并找出如何正确管理在孤立地址空间中运行的应用程序的这些不同部分。

对于绝大多数情况,我认为使用多个进程并不好。

0

在大多数情况下,如果你通过服务,但并不总是运行服务器在一个单独的过程中,你会得到你的性能的提高应用程序。 注意:服务可以在其自己的独立进程中运行,但为此您必须在xml中提供android:服务标记。在这种类型的设计,我想你已经知道

的一个大缺陷是,在Android的每个进程都在自己的虚拟machine.So运行,如果你产生新的进程会得到它自己的VM。现在您自己考虑哪个更好。运行整个应用程序的一个虚拟机或运行其中的两个虚拟机。 (在大多数情况下,我听说至少在android 1虚拟机绰绰有余,足以处理您需要的一切)

除此之外,另一个缺陷是,当你从你的应用程序的主进程分开的过程,你是在一个单独的进程中运行服务器服务的话,也可以不关机,即使你的应用程序遇到一个异常或错误作为其从主流程的过程,并且不依赖于生命周期的你的应用程序anymore.So它可以导致一些意外的行为,并可能导致您的应用程序发生故障。

如果您可以冒险,那么请与线程一起使用(我会建议服务中使用Asynctask)以满足您所寻求的目的,因为它将为您提供几乎相同的功能,同时保证安全应用程序范围/生命周期。

希望这有助于。

0

首先,你不需要单独申请,你定义自己的应用程序另一个进程。在大多数情况下,做这样的事情会提高你的表现,因为你的过程实际上在分离的物理过程中运行的可能性更大。 Android操作系统如何不支持这一点,而不是Android 4.03中的事件。

所以,你将从此得到的唯一好处是记忆,巫婆在我看来不应该是用于打开其它程序的理由。