Service是Android中一种很重要的组件,一般来说有两种用途:用Service执行长期运行的操作,并且与用户没有UI界面的交互;某个应用程序的Service可以被其他应用程序的组件调用以便提供更广泛的使用。要想使得自己写的Service能够正常运行,必须在AndroidManifest.xml中通过标签注册Service,类似于通过标签注册Activity一样。有两种方式使用Service,一种是通过Context类的startService方法启动Service,另一种是通过Context类的bindService方法启动Service。

需要注意的是,与其他的应用程序组件一样,Service默认情况下是运行在其所在宿主进程的主线程中的。也就是说如果我们在Service要做一些CPU密集型操作(比如播放MP3)或阻塞式操作(比如网络请求),那么主线程就会卡死,出现ARN(Application Not Responding)程序无响应现象,为了解决这种问题,我们应该在Service中创建一个新线程,然后将这些耗时操作放入到该新创建的线程中去执行,这样不会阻塞主线程。

为了搞明白Service是什么,我们首先要知道Service不是什么:
a. 首先Service不是另一个独立的进程。 Service不会自己开辟一个新的进程,除非特别指定,默认情况下Service是运行在应用程序所属的进程中。
b. Service不是另一个新线程。Service的操作都是在主线程中执行的,为了避免阻塞主线程,在Service中应该将耗时操作放入到一个新线程中执行。

通过上面的描述我们知道,Service其实很简单(没有开创新的进程和新的线程),Service提供了以下两个主要的特性:
a. 作为应用程序的一部分运行在后台,并且甚至不需要和用户进行交互。这种情况下,我们一般调用Context的startService方法(比如在Activity中调用startSerivce方法)启动service。
b. 作为某个应用程序的组件暴露出去,使得其他的应用程序可以调用该Service。这种情况下,我们一般调用Context的bindService方法,比如我们有两个应用App1和App2,在App1中我们有一个Service叫做App1Service,在App2中我们有一个Acitivity叫做App2Activity,即便App1没有启动,我们在App2的App2Activity中也可以通过调用bindService启动App1中的App1Service,并且通过调用bindService之后,在Service和调用者之间会建立连接进行程序间交互。

后续会写文章分别介绍startService与bindService的使用示例以及生命周期。

相关博文:
Android中startService的使用及Service生命周期
Android通过startService播放背景音乐简单示例
Android通过startService实现批量下载示例
Android中IntentService的使用及其源码解析
Android中bindService的使用及Service生命周期
Android中通过Messenger与Service实现进程间双向通信

更多相关文章

  1. Android(安卓)Q 不叫 Q,正式命名为 Android(安卓)10
  2. Android中Thread,hanlder(HanlderThread),Runnable之间的关系
  3. android中handler用法总结
  4. Android(安卓)开发之多线程处理、Handler 详解
  5. [置顶] Android(安卓)AsyncTask源码解析
  6. Android应用程序换肤实现系列(四)
  7. android 消息机制 Handler Looper 原理分析
  8. : Android下WebView取JavaScript传值问题解决
  9. android Handler 优势和劣势【原创】

随机推荐

  1. android 模拟器的使用(Android模拟器介绍
  2. Android初学的学习笔记
  3. Android(安卓)tips(八)-->Android(安卓)Stu
  4. 为什么Android没有iOS那么顺滑
  5. Android(安卓)onTouchEvent, onClick及on
  6. 2012年度工作总结
  7. Android(安卓)M 新的运行时权限开发者需
  8. Android在网络中与JavaWeb的项目进行交互
  9. Android最全面试题71道题 详解
  10. Android(安卓)***测试学习手册(三)Android(