在Android应用程序中使用多个进程的优缺点是什么?

时间:2013-11-02 17:49:54

标签: android process

我写这个问题不是作为任何特定应用的一部分,而是作为未来应用的潜在用途的一部分。我知道这个问题的答案可能非常具体,但我希望你能忍受我。我会按原样表达我的理解,希望你可以通过扩展它来帮助我。令人惊讶的是,我在网上搜索了一个“完整”的概述并且无法找到它。显然欢迎任何相关页面的链接。

默认情况下,Android应用程序在单个进程中运行。默认情况下,您启动的每个活动或服务都会在主线程中运行。用户的所有操作都由主线程的Looper排队,相应的回调在主线程中处理。

为了提供并发性,线程可以以多种不同的方式启动,单个或池中。在这方面没有明确需要多个过程。使用多个进程以允许设备的多个核心并行工作是不必要的,因为线程也可以并行运行,甚至可能是main thread?但也许实际上会更容易实现?

为了让Activity或Service在特定(可能不同的)进程中工作,您只需在Manifest文件中设置android:process属性。这么容易实现吗?

Android框架专为移动设备而构建,通常内存有限。因此,可以在各种情况下杀死进程,明确指出here。只要您实现活动和服务的生命周期回调,例如onStoponDestroy,这不应该给出任何实际问题。但显然,通过使用多个进程来划分应用程序的各个部分,可能会使更重要的事情保持活力。例如,后台下载服务可以保持活动(重要性为3级),而启动此服务的初始活动的进程(现在在后台(级别4))可以为其资源释放。此外,您正在隔离应用程序的核心功能,这可能会让您的设备更好地利用其资源吗?

Binder框架使IPC非常容易处理,无论实际使用多个进程,都可以使用。我认为为应用程序提供多个进程的主要成本是访问共享资源,或者在进程之间发送这些资源,不包括从Zygote分支进程所需的额外资源。我想知道使用多个进程是否真的会迫使你以不同的方式实现你的应用程序?

我认为从概念上讲,使用多个流程不会增加实施的便利性吗?

总结多个流程的优点:

  • 隔离可能会提供更长的终身保护。
  • 区域化使设备在重新获得资源方面具有更大的可操作性。
  • 并行化性能提升?

缺点:

  • 必须使用资源从Zygote分支新进程
  • 在一个应用程序中,需要在多个进程上共享资源,这会对设备和应用程序性能造成压力。

主要用例我能想到:

  • 将前台活动用于任何用户交互,并运行连续使用的绑定服务以执行有用的同步,该同步可能比用户对您的活动和/或应用程序的会话寿命更长。

如果您对我的理解有任何评论,请说明(在我的解释中注意几个问号)。如果你有任何优点和/或缺点添加请回复,我会将它们添加到列表中。

1 个答案:

答案 0 :(得分:6)

  

使用多个进程来允许设备的多个内核并行工作是不必要的,因为Threads也可以并行运行,甚至可能是你的主线程?

实时(非阻塞)线程将自动在多个核心上并行运行。

  

但也许实际上会更容易实现?

我认为线程比流程更容易,但“更容易”通常是一种意见。

  

例如,后台下载服务可以保持活动状态(重要性为3级),而启动此服务的初始活动的进程(现在在后台(级别4))可以为其资源释放。

除了通过首先使用这两个进程浪费更多资源,并且长时间保持服务运行通常是一种反模式。

  

Binder框架使IPC非常容易处理,无论实际使用多个进程,您都可以使用它;

开发人员通常不直接使用Binder。只有那些实现绑定服务的人才需要它,而且只占Android应用程序的一小部分。

  

我想知道使用多个进程是否真的会迫使您以不同的方式实现您的应用程序?

  

隔离可能会提供更长的终身保护

恕我直言,这不是在多个进程上浪费RAM,CPU和电池的有效借口。

  

并行化性能提升?

线程涵盖了这一点。

  

我能想到的主要用例

虽然有些情况下您的用例实际上是对用户的净收益,但这远非确定。鉴于您必须以不同的方式实现您的应用程序以处理多个进程,使用多个进程是最后的手段方法,而不是您经常做的事情,恕我直言。