首页
学习
活动
专区
圈层
工具
发布

Android 多线程-IntentService详解

和构造方法,onHandleIntent为异步方法,可以执行耗时操作 二、IntentService的常规使用套路 大概了解了IntentService的特点后,我们就来了解一下它的使用方式,先看个案例...,这里有两个方法是必须实现的,一个是构造方法,必须传递一个线程名称的字符串,另外一个就是进行异步处理的方法onHandleIntent(Intent intent) 方法,其参数intent可以附带从activity...,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent执行异步任务。...最后看看onHandleIntent方法的声明: protected abstract void onHandleIntent(Intent intent); 到此我们就知道了IntentService...的onHandleIntent方法是一个抽象方法,所以我们在创建IntentService时必须实现该方法,通过上面一系列的分析可知,onHandleIntent方法也是一个异步方法。

84330

Android四大组件之一Service

可以实现如下任务: 创建区别于主线程的线程来执行发送到onStartCommand()方法的全部Intent 创建工作队列,每次传递一个Intent到onHandleIntent() 所有请求处理完毕后停止服务...,不必调用stopSelf() 提供onBind()方法默认实现,返回null 提供onStartCommand()默认实现,它先发送Intent到工作队列,然后到onHandleIntent()方法实现...) { // TODO Auto-generated method stub // do something } } 以上就是实现IntentService类所需要的全部操作:无参构造方法和onHandleIntent...也就是自动生成的return语句不能改 2.继承Service类 使用IntentService将简化启动服务的实现,但如果要处理多线程,则可以继承Service来处理各个Intent 对于每次启动的请求...会导致更加复杂的实现 1.继承Binder类 如果服务仅用于本地应用程序并且不必跨进程工作,那么可以实现自己的Binder类来为客户端提供访问的方式 实现步骤如下 (1)在服务中创建Binder类实例来完成下列操作之一

92330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    IntentService使用及源码分析

    其实跟普通的Service差不多 1)自定义一个MyIntentService集成IntentService,重写构造方法和onHandleIntent方法,在HandleIntent里面执行我们的耗时任务等操作...(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); } 在onStart()方法里面其实就是用我们的...()里面有调用onHandleIntent()去处理我们的Intent,这就是为什么我们需要重写onHandleIntent的原因。...handle运行在主线程还是子线程,是取决于我们与那个线程的looper绑定在一个的,而IntentService在onCreate方法中将我们的mServiceHandler与子线程的looper绑定在一起...我们知道多次调用context.startService方法,不会多次调用我们的onCreate()方法,但会调用我们的onStart()方法,而在我们的onStart()方法里面我们调用mServiceHandler.sendMessage

    55200

    Android多线程介绍

    (其实我在实际项目中用的很少,一般用Executors.newSingleThreadExecutor()方法代替,一样的线程中管理任务队列,后面会详细说到线程池) AsyncTask AsyncTask...是一种轻量级的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程用于更新UI。...比如我就需要请求一个接口,然后进行UI更新,那么就可以用到AsyncTask,它的优点在于简单快捷,过程可控。...,其实就是开了一个线程,通过handler,执行onHandleIntent方法。...我的建议是: 轻量级,简单的任务可以直接用 AsyncTask 需要后台管理,用到上下文的时候用IntentService 其余场景都用线程池,毕竟线程池是最推荐,最优化的线程管理方法 感谢大家的阅读,

    70950

    intentservice使用(Intention)

    大家好,又见面了,我是你们的朋友全栈君。 IntentService浅析 说起IntentService就需要先了解一下Service。 Service 是长期运行在后台的应用程序组件。...()或者stopSelf()方法。...另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...而且,所有请求都在一个单线程中,不会阻塞应用程序的主线程(UI Thread),同一时间只处理一个请求。 那么,用 IntentService 有什么好处呢?...使用方法: 1、创建一个类并继承IntentService,重写onHandleIntent(),构造函数super("线程名"); 2、在AndroidManifest.xml里注册,同Service

    61130

    2016级移动应用开发在线测试12-service

    : 扩展Binder类:这种方式当你的service只给当前的程序用而且在后台执行的时候采用这种方式比较好。...()即使我们多次启动IntentService,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent执行异步任务...()创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作。...()intentservice内部通过HandlerThread和Handler实现异步操作 ()继承IntentService,有两个方法必须实现,一个是构造方法,必须传递一个线程名称的字符串,另外一个就是进行异步处理的方法...onHandleIntent(Intent intent)方法,其参数intent可以附带从activity传递过来的数据。

    82520

    Android Service的解析

    ,这样像网络、数据库、复杂计算这类耗时操作的执行就需要一个组件来承担。...应用内或应用间数据通信,Android每个应用程序都在自己的dalvik虚拟机中运行,一个应用是不允许访问其他应用的内存信息的,为此Android引入了Content Provider在不同应用间共享数据...如果是Remote Service,那么对应的Service则是运行在独立进程的main线程上。 Thread是程序执行的最小单元,可以用Thread来执行一些异步的操作。...创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作。...IntentService的创建 编写自己的Service类继承IntentService,并重写其中的onHandleIntent(Intent)方法,该方法是IntentService的一个抽象方法

    50510

    Service服务详解以及如何使service服务不被杀死

    android:exported 其他应用能否访问该服务,如果不能,则只有本应用或有相同用户ID的应用能访问。当然除了该属性也可以在下面permission中限制其他应用访问本服务。...() 默认提供onBind()的实现,并返回null 默认提供onStartCommand()的实现,实现发送intent到工作队列再到你的onHandleIntent()方法实现。...这些都加入到IntentService中了,你需要做的就是实现构造方法和onHandleIntent(),如下: public class HelloIntentService extends IntentService...,如onCreate(),onStartCommand()等,一定要调用super()方法,保证IntentService正确处理worker线程,只有onHandleIntent()和onBind()...这适合像下载一样的服务,立即恢复,积极执行。 如果想从服务获得结果,可以用广播来处理 创建“绑定的”服务 用bindService()方法将应用组件绑定到服务,建立一个长时间保持的联系。

    4.9K11

    创建后台任务的两种代码模式

    IntentService是一个轻量级的Service,系统帮我们自动调用了Service的一些方法,让我们可以一键完成后台任务的创建。...但IntentService与Service还是有所不同的: IntentService运行在独立线程,可以直接执行耗时操作,不会阻塞UI线程 IntentService使用onHandleIntent...,但不能更新UI(但实际上可以) 使用IntentService创建后台任务 创建IntentService非常简单,简单到和创建一个类差不多,但要注意,必须实现无参构造方法,并实现OnHandleIntent...那么通过这种方式,我们就可以很方便的实现IntentService的后台任务处理,同时完成任务执行完毕后的回源更新。...当然,不管是IntentService还是Loader,都是处理后台任务的最基础的方法,以IntentService来说,它是一个单消息队列,因此,对一些高密度、高并发的后台任务就不太适合,我们需要使用线程池来进行手动的管理

    73910

    App冷启动,你还要我怎样?

    方法一:IntentService 简单说,IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService...另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...,有一个onHandleIntent的方法,这个就是根据不同action来进行操作的,所以我们可以通过在onHandleIntent中来初始化一些耗时的操作,然后在application中onCreate...你的库初始化好了,我的app的用户体验就下降了)。那么,还有其他方法去解决初始化时间的问题吗?那肯定有啦,刚刚不是说了是方法一吗?现在就开始介绍方法二了。 方法二:简单粗暴法 何为简单粗暴法呢?...如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。 希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

    1.4K20

    23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

    在客户端( Activity )中, 从 onServiceConnection() 回调方法参数中接收 Binder ,通过 Binder 对象即可访问 Service 内部的数据。...中直接处理耗时的任务 4.2 IntentService 的特征 会创建独立的 worker 线程来处理所有的 Intent 请求 会创建独立的 worker 线程来处理 onHandleIntent...(Intent) 启动可以处理异步请求的 Service 使用时你只需要继承 IntentService 和重写其中的 onHandleIntent(Intent) 方法接收一个 Intent 对象...4.3.6 总结 IntentService 的特征有: 会创建独立的 worker 线程来处理所有的 Intent 请求; 会创建独立的 worker 线程来处理 onHandleIntent...Server 端用一个类继承自 Binder 并实现该接口,覆写了其中获取当前下载进度的方法。

    1.2K10

    Android入门教程 | 四大组件之Service(前台服务,后台服务)

    用startService方法启动服务并不会让 activity 持有service 的实例。 它们之间可以用广播来进行沟通。或者用 EventBus 之类的工具进行沟通。...前面是用startService方法启动的服务,后面用stopService(Intent)来停止服务。...IntentService会创建单独的worker线程来处理onHandleIntent()方法实现的代码,因此开发者无须处理多线程问题。...IntentService实例 创建 SccIntentService.java 继承自 IntentService 类,重写 onHandleIntent() 方法、创建一个无参构造函数,其代码如下:...IntentService还有个好处就是 「用完即走」。执行完onHandleIntent()方法里面的耗时操作后,自行调用onDestroy()方法,进行关闭。 Android入门教程视频参考

    7.2K30

    App冷启动,你还要我怎样?

    方法一:IntentService 简单说,IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService...另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...,有一个onHandleIntent的方法,这个就是根据不同action来进行操作的,所以我们可以通过在onHandleIntent中来初始化一些耗时的操作,然后在application中onCreate...你的库初始化好了,我的app的用户体验就下降了)。那么,还有其他方法去解决初始化时间的问题吗?那肯定有啦,刚刚不是说了是方法一吗?现在就开始介绍方法二了。 方法二:简单粗暴法 何为简单粗暴法呢?...如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。 希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

    2K00

    仿淘宝收货地址,本地数据库

    下面进行详细的代码讲解: (一)本人在程序启动的时候开了一条后台服务landDivideServeice,目的是为了将全国的省市县总共4,189条数据插入到手机数据库里面去,原本的数据是保存在7个txt...这里要注意的一点是landDivideServeice是继承IntentService的,不是直接继承Service的....IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统Service一样,同时...简单的说IntentService类似于一条后台线程,但操作完成时,我们不用手动去关闭Serveice,他会自动关闭.MyIntentService继承IntentService,之后必须实现一个无参数的构造方法...实现倒计时功能主要是继承CountDownTimer类,重写onTick和onFinsh这两个方法,onFinish()中的代码是计时器结束的时候要做的事情;onTick(Long m)中的代码是你倒计时开始时要做的事情

    4K70

    4.网络编程

    选项卡 查看下侧的Raw选项卡,查看返回结果 Http 异步请求的封装 什么场景用异步任务 处理耗时操作的时候用到异步任务,否则andorid 会抛出ANR(application not response...因此在主线程中调用异步任务时需要设置回调 开发过程中UI控制层访问网络最关心的是什么 UI控制层访问网络的目的是为了获得网络返回数据,UI层最关心返回的数据结果;在java开发中,一切皆有面向对象的思想...后台任务需要按照一定的格式归档存储 通过IntentService的方式运行后台任务 IntentService IntentService是Service类的子类,用来处理异步请求。...客户端可以通过startService(Intent)方法传递请求给IntentService。...必须实现一个无参数构造函数 onHandleIntent()运行在子线程中 如果IntentService 被start了多次,onHandleIntent()方法将排队执行多次。

    743100
    领券