gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:10:09 25 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




我写这个问题不是作为任何特定应用程序的一部分,而是作为 future 应用程序潜在用途的一部分。我知道这个问题的答案可能非常特定于应用程序,但我希望你能忍受我。我将按原样传达我的理解,希望您能通过扩展来帮助我。令人惊讶的是徒劳的,我在网上搜索了“完整”的概述,但没有找到。显然欢迎任何指向相关页面的链接。

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

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

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

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

Binder 框架使 IPC 相当容易处理,您通常会使用它,而不管实际使用多个进程。我认为应用程序拥有多个进程的主要成本是访问共享资源,或在进程之间发送这些资源,不包括从 Zygote fork 进程所需的额外资源。我想知道使用多个进程是否真的会迫使您以不同的方式实现您的应用程序?

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

总结 多进程的优点:

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

  • 缺点:
  • 必须使用资源从 Zygote fork 出一个新进程
  • 在一个应用程序中,资源需要在多个进程之间共享,这对设备和应用程序性能都造成压力。

  • 主要用例 我能想到:
  • 将前台 Activity 用于任何用户交互,并运行持续使用的绑定(bind)服务来执行有用的同步,这可能比用户与您的 Activity 和/或应用程序的 session 生命周期更长。

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

    最佳答案

    Using multiple processes to allow the multiple cores of your device to work in parallel is not necessary since Threads can be run in parallel as well, maybe even your main thread?



    实时(非阻塞)线程将自动跨多个内核并行运行。

    But perhaps it will be easier to actually achieve?



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

    For instance a background download Service could be kept alive (level 3 in importance), while the process with the initial Activity that started this Service, now in the background (level 4) could be freed for its resources.



    除了首先拥有两个进程会浪费更多资源,并且让服务长时间运行通常是一种反模式。

    The Binder framework makes IPC fairly easy to handle, and is something you will use generally, regardless of actually using multiple processes



    开发人员通常不会直接使用 Binder。只有那些实现绑定(bind)服务的人需要它,这在 Android 应用程序中所占的比例相当小。

    I wonder whether using multiple processes will actually force you to implement your application differently?



    是的。

    Isolation potentially gives more lifetime protection



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

    Parallelization performance boost?



    线程涵盖了这一点。

    The main use case I can think of



    虽然可能存在您的用例实际上对用户带来净 yield 的场景,但远非确定。鉴于您必须以不同的方式实现您的应用程序来处理多个进程,使用多个进程是最后的手段,而不是您经常做的事情,恕我直言。

    关于android - 在android应用程序中使用多个进程的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744906/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com