2012-05-13 28 views
5

我正在阅读Android开发人员博客文章Process and Threads,其中讨论了如何为应用程序的特定组件创建新进程。但是我不明白什么时候在我的应用程序中创建一个新流程成为绝对需要。你能否帮我理解我在这方面的疑问。何时需要在应用程序中创建单独的进程?

  1. 作为开发人员,我应该觉得我需要为Android组件创建一个单独的进程?
  2. 引入新过程是否对应用程序的整体性能有任何副作用?

任何其他信息,非常感谢。

感谢, SKU

+0

貌似这个StackOverflow的线程更好的记录:[请点击此链接:)(https://stackoverflow.com/questions/4658511/android-how-to-decide-whether-to-run-a-service- in-a-separate-process) – Tobliug

回答

0

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

2.)线程不应该使用..我们应该使用AsyncTask或装载机而不是android。

+2

我理解并享受在我的应用程序中使用单独线程(以Handler,AsyncTask和worker Thread的形式)的好处。但是,它并不意味着以上述任何一种方式创建新线程将创建一个新流程。你觉得使用单独的过程是将这些具有共同资源使用情况的线程分组吗? – sku

+0

不,允许不同应用程序中的组件共享同一个进程有助于减少资源使用。创建新流程将增加资源利用率,但有时可能需要。例如,即使在不同进程中运行的应用程序崩溃,您也可能希望您的serice运行。 – Rookie

+0

我不会说线程不应该被使用。 AsyncTask使特定类型的任务更容易以编程方式实现,例如某些任务执行时间有限,不应在主线程上执行,如下载文件。 – Kerry

0

1.)在android 4.0(可能3.0,不知道虽然)该设备不允许您在主线程中使用HTTP代理,因为这会降低UI .. 这是线程派上用场。

此外,使用需要大量cpu的函数时,如果这些函数在UI线程中运行,则UI将滞后,直到函数完成才会响应。

2)截至1所述,它实际上会提高应用程序的视觉表现;)

+1

嗨Wampie,我明白为什么我需要为耗时的操作设置一个单独的线程。但我无法理解为什么需要为Android的任何组件分别创建一个进程。除非另有指定,否则应用程序中的新线程将在现有应用程序进程中创建。我仍然在寻找关于“为什么要求完全分离过程”的答案 – sku

+2

过程!=线程 – Ethan

1

,如果有你的应用程序的组件并不一定需要在两个运行有一个单独的进程可能是有用的对用户有用,而后台任务对应用程序“正确性”(无论是现在还是未来)都至关重要。其典型例子是一个应用程序,它具有一项服务,在该服务中,服务会保存或上传对您的应用程序至关重要的一些数据(关键在于获取数据的唯一方法是让用户重新输入数据!)。该服务可能负责做类似上传或保存数据的事情,而活动只是用户的界面。所以开发人员应该解耦这两个组件,以防止我的下一点可能出现的问题。

Android被设计为在资源(尤其是内存)受限的环境中运行,因此被认为不重要的进程被定期终止以打开内存“低记忆杀手”(LMK)是重要的(如果你是谷歌,你会得到关于这个话题的大量信息)。诸如前台进程之类的东西由于目前正在使用而具有更高的优先级,但它们有时会因为消耗太多内存等原因而被杀掉。现在,假设用户在应用程序中执行某些操作后,需要将某些数据保存到数据库中,并且使用服务来确保即使用户从应用程序中导航也可以完成此操作。除非您在自己的进程中创建服务,否则包含活动和服务的进程很可能会被终止,因为该进程属于非前台活动。 但是,并不总是需要将服务放在自己的进程中,通常只需给服务提供自己的线程即可;这是非常特定的应用程序。我只会在自己的过程中放置​​一个服务,如果它花费比几秒钟更长的时间(足够长的时间让用户离开我的应用程序并导入LMK)来在后台执行某些任务并且该任务相关到我的应用程序的“正确性”(稍后的IE保存数据)。对于像缓存这样的东西,坚持线程,因为如果进程过早死亡,您可以稍后重新创建该数据。

另一个原因是有一个单独的进程是,如果你正在运行一个全球服务(可通过比你自己的其他应用程序使用的服务),也许你经由配置的活动提供了一个接口。

至于性能问题,一定会有这样的性能问题。进程间通信并不便宜,所以如果你适合一个特定的用例,你应该只使用一个单独的进程,就像上面提到的那样。此外,维护一个进程还有一定的内存开销,所以这是另一个性能问题。

相关问题