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