美文网首页
基础篇2:Service

基础篇2:Service

作者: Danny_RxFun | 来源:发表于2017-07-31 16:25 被阅读0次

    目录
    一、作用
    二、生命周期
    三、启动方式
    四、启动方式
    五、IntentService

    Service简介

    Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。

    注意

    1. 长期运行的后台任务 — Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。
    2. 执行在UI线程中 — Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作。

    一、作用

    二、生命周期

    onCreate
    onstartCommand
    onBind
    onunbind
    ondestroy

    三、启动方式

    • startservice — startservice 一旦被开启 与调用者 就没有关系了。这个服务 会长期的在后台运行。
    • bindservice — bindservice 是 将调用者 与 服务绑定,如果开启这个服务的 activity 被销毁,那么这个服务也相应的要挂掉

    四、

    五、IntentService

    IntentService简介

    IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们去手动控制。另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推。

    Service本身存在两个问题

    1. Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中。
    2. Service也不是专门一条新线程,因此不应该在Service中直接处理耗时的任务。
    IntentService特征
    • 会创建独立的worker线程来处理所有的Intent请求。
    • 会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题。
    • 所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service。
    • 为Service的onBind()提供默认实现,返回null。
    • 为Service的onStartCommand提供默认实现,将请求Intent添加到队列中。
    • 所有请求都在一个单线程中,不会阻塞应用程序的主线程(UI Thread),同一时间只处理一个请求。
    • 不可以直接和UI做交互。为了把它执行的结果体现在UI上,需要把结果返回给Activity。
    • 工作任务队列是顺序执行的,如果一个任务正在IntentService中执行,此时你再发送一个新的任务请求,这个新的任务会一直等待直到前面一个任务执行完毕才开始执行。
    • 正在执行的任务无法打断。
    使用IntentService的好处
    • 省去了在Service中手动开线程的麻烦。
    • 当操作完成时,不用手动停止Service。
    使用步骤

    继承IntentService类,并重写onHandleIntent()方法即可。

    相关文章

      网友评论

          本文标题:基础篇2:Service

          本文链接:https://www.haomeiwen.com/subject/insrlxtx.html