何时需要在应用程序中创建单独的进程?

时间:2012-05-13 20:14:15

标签: android

我正在阅读Android开发人员博客Process and Threads中的一篇文章,该文章讨论了为Application的特定组件创建新流程。但我无法理解何时在我的应用程序中创建新进程成为绝对需要。能否帮助我理解我在这方面的疑虑。

  1. 作为开发人员,我觉得我需要为Android组件设一个单独的进程吗?
  2. 引入新流程会对应用程序的整体性能产生任何副作用吗?
  3. 非常感谢任何其他信息。

    谢谢, SKU

3 个答案:

答案 0 :(得分:3)

如果应用程序的某些组件不一定需要运行才能对用户有用,并且后台任务对应用程序至关重要,那么拥有一个单独的进程可能非常有用"正确性" (无论是现在还是将来)。典型的例子是一个应用程序,它有一项服务,服务保存或上传一些对您的应用程序至关重要的数据(关键意味着获取数据的唯一方法是让用户重新输入它!)。该服务可能负责执行上传或保存数据等操作,而活动只是用户的界面。因此,开发人员应该将这两个组件分离,以防止出现下一点可能出现的问题。

Android被设计为在资源(特别是内存)受限的环境中运行,因此被认为不重要的进程会被定期杀死,以便通过“低内存杀手”打开重要内存。 (LMK)(如果你谷歌这个你将获得关于该主题的大量信息)。像前景流程这样的事情可以理解为具有更高的优先级,因为它们目前正在使用,但是它们有时会因为消耗过多的内存而被杀掉。现在,假设您需要在用户在应用程序中执行某些操作后将某些数据保存到数据库,并且您使用服务来确保即使用户导航离开应用程序也能完成此操作。除非您在自己的进程中创建服务,否则包含活动和服务的进程可能会被杀死,因为该进程属于非前台活动。 但是,并不总是需要将服务放在自己的进程中,通常只需简单地为服务提供自己的线程就足够了;它非常适用于应用程序。我只会在自己的进程中放置一个服务,如果花费的时间超过几秒钟(足够长的时间让用户离开我的应用程序并让LMK进入)在后台执行某项任务并且该任务相关正确性"正确性"我的应用程序(I.E.保存数据供以后使用)。对于像缓存这样的东西,坚持使用线程,因为如果进程过早被杀死,你可以稍后重新创建这些数据。

拥有单独流程的另一个原因是,如果您正在运行全局服务(可由您自己以外的应用程序使用的服务),您可能通过活动进行配置来提供接口。

至于性能问题,对于这样的事情肯定会受到性能影响。进程间通信并不便宜,因此如果您适合特定用例(例如上面提到的用例),您实际上应该只使用单独的进程。此外,还有一定数量的内存开销用于维护进程,从而导致另一次性能损失。

答案 1 :(得分:0)

1.)当您不希望应用程序行为缓慢时,您需要在单独的进程或线程上执行某些操作。通过引入线程,您可以强制您的应用不在UI线程上运行。从而使您的应用响应其他事件。例如:当您必须从Web服务获取某些数据时,您可以使用线程,以便它在后台发生并且不会影响您的应用。

2.)不应该使用线程..我们应该在Android中使用AsyncTask或加载器。

答案 2 :(得分:0)

1。)在android 4.0中(可能是3.0,但不确定)设备不允许你在主线程中使用HTTP Agent,因为这会降低UI的速度。 这是线程派上用场的时候。

此外,如果使用需要大量cpu的函数,如果这些函数在UI线程中运行,则UI将滞后,并且在函数完成之前不会响应。

2.)如1所述,它实际上会改善你的应用程序的视觉效果;)