一、Service:
(一)、Service 简介:
1、何谓“Service”?
“Service” 意思即“服务”的意思, 像 Windows 上面的服务一样,服务是在后台上运行,承担着静悄悄的不为人所注意的工作。Service运行在后台,它是不可见的、无界面的程序。
Service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity,这个时候程序要在后台继续播放;比如检测SD卡上文件的变化;再或者在后台记录用户的地理信息位置的改变;或者启动一个服务来运行并一直监听某种动作等等。
2、Service概念的总结:
Service在后台运行,不可以与用户直接交互;
一个服务不是一个单独的进程。服务对象本身并不意味着它是在自己的进程中运行,除非另有规定,否则它与运行程序是同在一个进程中;
一个服务不是一个单独的线程。Service和其他组件一样,默认情况下,Service中的所有代码都是运行在主线程中;
Service存在的价值虽然不如Activity那么清晰。但是一般都让Service执行耗时较长的操作。例如:播放音乐、下载文件、上传文件等等。但是因为Service默认运行在主线程中,因此不能直接用它来做耗时的请求或者动作,最好在Service中启动新线程来运行耗时的任务;
需要通过某一个Activity或其他Context对象来启动Service。context.startService() 或 context.bindService();
Service很大程度上充当了应用程序后台线程管理器的角色。(如果Activity中新开启一个线程,当该Acitivyt关闭后,该线程依然在工作,但是与开启它的Activity失去联系。也就是说此时的这个线程处于失去管理的状态。但是使用Service,则可以对后台运行的线程有效地管理。)
3、为什么不使用后台线程而使用Service?
1、Service可以放在独立的进程中,所以更安全;
2、使用Service可以依赖现有的binder机制,不需要在应用层面上处理线程同步的繁杂工作;
3、系统可以重新启动异常死去的Service。
4、Service 与 Activity 的相同点与不同点:
不同点:Activity是与用户交互的组件,即可以看到UI界面,而Service是在后台运行、无需界面;
相同点:使用Activity 时我们需要在配置文件中声明标签,同样的使用Service 也需要在配置文件中声明标签。都具有一定的生命周期。
ÿ