• IntentService


    一、IntentService简介
    IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。
    先看Service本身存在两个问题:
    Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中;
    Service也不是专门一条新线程,因此不应该在Service 中直接处理耗时的任务;


    二、IntentService特征

    结论:可以在onHandleIntent方法里执行耗时操作

    IntentService是Service的子类。里面专门开辟了一个子线程来进行耗时操作。当任务结束之后,会自动停止,所以不用我们去调用stopService来停止他。IntentService默认为Service提供了onBind()和onStartCommand()方法,所以我们在继承使用IntentService的时候不用再重写这两个方法,而直接使用onHandleIntent(Intent intent)方法即可。

    onHandleIntent(Intent intent): 此方法专门开辟了一个子线程来进行耗时操作的处理。并且这个调用耗时操作的方式是以队列的形式进行调用,也就是说如果有多个耗时操作进行处理的时候,他会排队进行操作。

    通过源码我们可以看到,在第一次启动IntenService的时候,会去执行onCreate()方法。在onCreate()方法中,程序先去创建了一个HandlerThread线程并且启动了他,然后实现一个继承了Handler的ServiceHandler类,并将HandlerThread的Looper传递给ServiceHandler,由于Looper属于HandlerThread,HadlerThrad又是一个异步线程,当我们把Looper传递给ServicerHandler时,使得ServiceHandler也变成了一个异步执行的线程。
    由于是在一个子线程中执行的,这也就解释了为何onHandleIntent()方法里面可以进行耗时操作的原因,因为他本身就是在一个子线程中执行。

     

  • 相关阅读:
    ubuntu防火墙设置通过某端口
    pandas入门
    pyplot入门
    numpy教程
    跨域请求 spring boot
    spring boot 启动流程
    代理配置访问
    AOP,拦截器
    spring boot 启动不连接数据库
    Python 3.x 连接数据库(pymysql 方式)
  • 原文地址:https://www.cnblogs.com/suiyilaile/p/16636376.html
Copyright © 2020-2023  润新知