为什么用服务不用线程-Android

1.什么是Service?

         A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use.(服务是一个应用程序组件,要么满足在一个应用程序中长期后台运行但是不和用户交互的需求,要么给其它的应用程序提供功能。)

2.Service的两大特点:

    1):长期后台运行。

    2):没有界面。

3.为什么要用Service而不用Thread了?

   我们知道用new Thread(){}.start();的方式开启的子线程也是没有界面且长期后台运行的。那当我们想要满足服务的第一个功能时,为什么不直接使用开启一个新的线程的方式了?

  这个问题可以从Android系统进程管理的方面来回答。Android系统中应用程序一旦被打开,通常情况下退出应用程序,即清空了任务栈后,该应用程序的进程并不会停止,而是以一个空进程的状态存在着,这是为了方便下一次快速启动(应用程序启动时间的长短是一个很重要的性能指标)。但是这样的管理机制会带来一个问题,那就是对内存的过度消耗。随着系统的运行,会出现内存不足的问题。Android系统有一套内存清理机制。 按照优先级去回收系统的内存。


进程分为5个等级的优先级:(从高到低)

1.Foreground process           前台进程   用户正在操作的应用程序对应的进程(获得焦点)

2.Visible process                  可视进程   用户仍然可以看到这个进程的界面(失去焦点)。

3.Service process                 服务进程   应用程序有一个服务组件在后台运行。

4.Background process           后台进程  应用程序没有服务在运行 并且最小化 (activity onstop)。

5.Empty process                  空进程     应用程序退出,没有任何运行的activity, 任务栈空了。

     当一个新的进程被创建或者正在运行的进程请求新的内存资源,但是系统内存不足时,按上面的优先级由高到低依次回收内存,以满足新提出的内存需求。如果是直接new 出来的线程,当应用程序退出时,其被回收的优先级是5,是最先被回收的。因而长期后台运行的组件, 我们不应该在activity中开启子线程。而是应该要创建服务,在服务里面开启子线程。这样既能保证长期后台运行,又能提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,进程又会被重新创建。

 

你可能感兴趣的:(android)