service服务与线程关系

应用程序主线程并不总是UI线程,当活动停止时,activity的onStop被执行,因此UI线程被从该活动中移走并移动到相同或不同应用程序中的另一个活动。然而,这并不意味着应用程序不再处于活动状态,它可以继续在后台工作,直到它被操作系统或用户关闭。那么谁让它在后台运行?它是主线程而不是UI线程。

在Android中,服务是一个应用程序组件,可以在UI线程的后台执行长时间运行的操作。通过背景,这意味着它没有用户界面。服务默认在调用Component进程的主线程上运行(因此可能会降低响应速度并导致ANR),因此您应该创建一个新线程来执行长时间运行的操作。服务也可以在完全不同的过程中运行。 Unlike Activity components, Services do not have any graphical interfaces. Also Broadcast Receivers are for receiving broadcast messages (broadcast, multicast, unicast) and perform short tasks whereas Services are meant to do lengthy processing like streaming music, network transactions, file I/O, interact with databases, etc. When a Service is started by an application component like an Activity it runs in the background and keeps running even if the user switches to another application or the starting component is itself destroyed


 IntentService

很多时候,启动一个Service就是要它完成一个复杂而耗时的任务,完成之后,这个Service就可以退出了。

例如文件下载。Activity界面启动负责下载的Service,Service安静的下载,下载完成了,就可以自己退出。下载的过程中,Activity可以继续显示下载的进度,也可以不用关心当前的状态而完全退出。

Android SDK为开发者准备好了这样一个现成的Service-IntentService。

IntentService是Service的子类,就是为了上面的那种使用场景而设计的。Android SDK对Service类进行了进一步的封装和扩展,方便开发者直接使用,而不需要重新造轮子了。

使用IntentService,

继承IntentService,实现它的onHandlerIntent()函数。onHandlerIntent()是在工作线程中被调用的,所以可以在它当中添加耗时的任务处理,


网上一个回答很有趣
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,841评论 25 708
  • 2018年Android 面试题 IT开发仔2018-03-21 15:26:46 在这“金三银四”的季节,我准备...
    王培921223阅读 2,541评论 3 24
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,754评论 2 51
  • 大理兰若寺青年旅社楼顶有个酒吧,负责人黑山老妖,我称之为妖哥。 当初也是受朋友之托,过来帮忙顶场的。唱完之后,准备...
    我开始写影评了阅读 175评论 0 0
  • 光秃秃的水泥路 柏油路 泥路 光秃秃的公交车站牌和房屋 光秃秃的行道树 车 还有光秃秃裸露的皮肤 从屋里到屋外阳光...
    婣鳥阅读 270评论 2 2