Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 何时需要在应用程序中创建单独的流程?_Android - Fatal编程技术网

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

Android 何时需要在应用程序中创建单独的流程?,android,Android,我在Android开发者博客上读到一篇文章,其中谈到为应用程序的特定组件创建新流程。但是我不明白什么时候在我的应用程序中创建一个新的进程会成为一种绝对的需要。你能帮我理解我在这方面的疑问吗 作为一名开发人员,我什么时候会觉得需要为Android组件设置一个单独的流程 引入新流程对应用程序的整体性能有任何副作用吗 任何其他信息都将不胜感激 谢谢, SKU1。)当您不希望应用程序运行缓慢时,您需要在单独的进程或线程上执行某些操作。通过引入线程,您可以强制应用程序不在UI线程上运行。从而使您的应用程序

我在Android开发者博客上读到一篇文章,其中谈到为应用程序的特定组件创建新流程。但是我不明白什么时候在我的应用程序中创建一个新的进程会成为一种绝对的需要。你能帮我理解我在这方面的疑问吗

  • 作为一名开发人员,我什么时候会觉得需要为Android组件设置一个单独的流程
  • 引入新流程对应用程序的整体性能有任何副作用吗
  • 任何其他信息都将不胜感激

    谢谢, SKU

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

    2.)不应使用线程。我们应该在android中使用AsyncTask或Loader。

    1。)在android 4.0(可能还有3.0,但不确定)中,设备不允许您在主线程中使用HTTP代理,因为这会减慢UI。。 这时线程就派上了用场。

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


    2.)如第1条所述,它实际上会提高应用程序的视觉性能;)

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

    Android被设计为在资源(特别是内存)受限的环境中运行,因此被认为不重要的进程会被“低内存杀手”(LMK)周期性地终止,以便为重要的进程打开内存(如果你在谷歌上搜索它,你将获得大量关于该主题的信息)。可以理解的是,由于前台进程目前正在使用,它们被赋予了更高的优先级,但有时它们也会因为占用太多内存等原因而被终止。现在,假设在用户在应用程序中执行某些操作后,您需要将一些数据保存到数据库中,并且您使用服务来确保即使用户离开应用程序也能完成此操作。除非在自己的流程中创建服务,否则包含活动和服务的流程可能会被终止,因为该流程属于非前台活动。 然而,并不总是需要将服务放在它自己的进程中,通常简单地给服务自己的线程就足够了;它非常特定于应用程序。如果在后台执行某项任务(即保存数据以备以后使用)所花的时间可能超过几秒钟(足以让用户离开我的应用程序并让LMK介入),并且该任务与我的应用程序的“正确性”相关,我只会将服务放在它自己的流程中。对于缓存之类的东西,请使用线程,因为如果进程过早终止,您可以稍后重新创建该数据

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


    至于性能问题,像这样的东西肯定会受到性能的影响。进程间通信并不便宜,因此如果您适合特定的用例(如上面提到的用例),您应该只使用单独的进程。另外,维护一个进程会有一定的内存开销,这是另一个性能问题。

    我理解并享受了在我的应用程序中使用单独线程(以处理程序、异步任务和工作线程的形式)的好处。但这并不意味着以上述方式创建一个新线程将创建一个新流程。您是否认为使用单独的进程就是对具有共同资源使用情况的线程进行分组?否,允许不同应用程序中的组件共享同一进程有助于减少资源使用。创建新流程将提高资源利用率,但有时可能是必要的。例如,即使在不同进程中运行的应用程序崩溃,您也可能希望您的服务正在运行。我不会说不应该使用线程。AsyncTask使特定类型的任务更易于通过编程实现,例如,某些任务的执行时间有限,不应在主线程上完成,例如下载文件。@Raghav,我理解您关于资源利用率的观点。我觉得单独处理应该有很多其他用途。感谢您启动线程。对于Android中的许多线程任务,AsyncTasks的负载还不够重,对于需要比AsyncTask提供的更通用接口的重载任务,Android中首选Handler和HandlerThreads。另外,@Rookie,你错误地将线程的一般主题与Java中提供的线程类混为一谈……嗨,Wampie,我确实理解为什么我需要一个单独的线程来完成耗时的操作。但我不明白为什么Android的任何组件都需要单独的流程。您的应用程序中的新线程