我写这个问题不是作为任何特定应用程序的一部分,而是作为未来应用程序潜在用途的一部分。我知道这个问题的答案可能是非常具体的应用程序,但我希望你能忍受我。我将按原样传达我的理解,希望你能通过扩展它来帮助我。令人惊讶的是,我在网上搜索了一个“完整”的概述,但没有找到它。显然,欢迎任何指向相关页面的链接。
默认情况下,Android 应用程序在单个进程中运行。默认情况下,您启动的每个 Activity 或 Service 甚至会在主线程中运行。用户的所有动作都由主线程的 Looper 排队,相应的回调在主线程中处理。
为了提供并发性,线程可以以多种不同的方式启动,单个或在池中。在这方面没有明确需要多个进程。不需要使用多个进程来允许设备的多个内核并行工作,因为线程也可以并行运行,甚至可能是您的主线程?但也许实际实现起来会更容易?
为了让 Activity 或 Service 在特定(可能不同)的进程中工作,您只需android:process
在 Manifest 文件中设置属性。这么容易实现?
Android 框架是专门为移动设备构建的,这些设备的内存通常有限。因此,进程可以在各种情况下被杀死,这里明确说明。只要您实现了活动和服务的生命周期回调,例如onStop
或onDestroy
,这不应该带来任何真正的问题。但显然,通过使用多个进程来划分应用程序的各个部分,可能会使更重要的事情保持活力。例如,一个后台下载服务可以保持活动状态(重要性级别 3),而具有启动此服务的初始 Activity 的进程现在在后台(级别 4)可以释放其资源。此外,您隔离应用程序的核心功能这一事实可能会让您的设备更好地利用其资源?
Binder 框架使 IPC 相当容易处理,并且是您通常会使用的东西,而不管实际使用多个进程。我认为应用程序拥有多个进程的主要成本是访问共享资源,或者在进程之间发送这些资源,不包括从 Zygote 分叉进程所需的额外资源。我想知道使用多个进程是否真的会迫使你以不同的方式实现你的应用程序?
我认为从概念上讲,使用多个流程不会增加实施的便利性?
总结多进程的优点:
- 隔离可能会提供更多的终身保护。
- 分隔使设备在重新获得资源方面更具可操作性。
- 并行化性能提升?
缺点:
- 必须使用资源从 Zygote 派生一个新进程
- 在一个应用程序内,资源需要在多个进程之间共享,这对设备和可能的应用程序性能都造成了压力。
我能想到的主要用例:
- 为任何用户交互使用前台活动并运行持续使用的绑定服务来进行有用的同步,这可能会比用户与您的活动和/或应用程序的会话寿命更长。
如果您对我的理解有任何意见,请说明(注意我的解释中的几个问号)。如果您有任何优点和/或缺点要添加,请回复,我会将它们添加到列表中。