IntentService是什么? 这篇文章是之前就写好的,一直没有整理出来,这几天有空正好整理发布一下。...而IntentService就是解决这个问题的,它是Service的一个抽象子类,需要实现onHandleIntent,代码在这个函数中执行。...所以IntentService就是一个自带子线程的Service。 那么它是如何实现的,我们通过它的源码来简单分析一下。...那么IntentService如何退出这个线程? 上面我们知道最后通过stopSelf停止服务,但是还没有看到对线程的操作。...总结 IntentService其实很简单,就是内部实现了一个使用Handler机制的子线程而已,但是它使用起来方便了很多。
IntentService的Demo程序 IntentService常被用于处理异步任务,使用的步骤是,先继承IntentService,再在handleIntent方法里写业务逻辑。...Demo的运行情况就讲到这里,下面我们通过源码,来揭开IntentService的神秘面纱。 源码分析 IntentService继承于Service,是一个抽象类。...先看IntentService的成员变量: String mName ; 这是IntentService所在线程的名字,可在声明一个IntentService的时候,用IntentService的构造方法...IntentService(String name)从外部传入进来。...接下来再来看它的方法,我们将通过方法将IntentService的工作流程和它的成员变量串连起来。
命令模式:IntentService 编写自己的Service将继承Android...的Service类,或者Service的子类IntentService。...public class ServiceDownloader extends IntentService{ private HttpClient client = null; public... return EntityUtils.toByteArray(entity); } } } 命令模式服务的客户端 /*客户端采用命令方式触发服务,由于IntentService
IntentService继承于Service,内部使用工作线程来处理请求的任务。 使用 Step1....定义IntentService的子类:传入线程名称、重写 onHandleIntent()方法 public class MyIntentService extends IntentService {...对比 IntentService与Service的区别 Service依赖于应用程序的主线程,所以不宜在Service中编写耗时的逻辑和操作,否则会引起ANR;IntentService创建一个工作线程来处理任务...IntentService与其他线程的区别 IntentService内部采用HandlerThread实现,作用类似于后台线程。...[IntentService]https://developer.android.com/reference/android/app/IntentService [Create a background
系统组件的一个核心服务,负责四大组件的启动,切换和调度,以及应用程序的管理和调度工作; 四、LocalBroadcastManager详解 1、三个集合类 1、 private final HashMapBroadcastReceiver..., ArrayList> mReceivers = new HashMapBroadcastReceiver, ArrayList>(); key是BroadcastReceiver,value是每个BroadcastReceiver对应可以接收几个action的广播; 2、 private...private static class ReceiverRecord { final IntentFilter filter; final BroadcastReceiver
Demo.java package com.example.receivedemo; import android.content.BroadcastReceiver...android.content.Context; import android.content.Intent; import android.widget.Toast; public class Demo extends BroadcastReceiver
IntentService浅析 说起IntentService就需要先了解一下Service。 Service 是长期运行在后台的应用程序组件。...所以引入了今天的话题:IntentService。...IntentService 是继承于 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作,启动 IntentService 的方式和启动传统 Service...另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...因此,并不建议通过 bindService() 启动 IntentService,而是通过startService()来启动IntentService。
BroadcastReceiver 用于接收程序(包含用户开放的程序和系统内建程序)所发出的Broadcast intent 耗电量 开机启动 窃取别人短信 窃取别人电话 开发: 创建须要启动的...BroadcastReceiver(包含启动的Intent系统已经创建的) 继承BroadcastReceiver类而且重写onReceive()方法 注冊广播接收者 静态注冊(配置文件)或者动态注冊...BroadcastReceiver都有可能被启动 BroadcastReceiver本质上仅仅是一个系统级的监听器—>他专门负责监听各种程序所发出的的Broadcast 注冊广播接受者 静态注冊...我们新建三个BroadcastReceiver。...这里不能使用子线程来解决 , 由于 BroadcastReceiver 的生命周期非常短 , 子线程可能还没有结束,BroadcastReceiver 就先结束了 .BroadcastReceiver
我想使用动态注册的BroadcastReceiver有一个Activity的引用,所以它可以修改其UI。...这里是显示问题的示例代码: package com.example; import android.app.Activity; import android.app.IntentService; import...android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import...public class RegisterBroadcastReceiver extends Activity { public static class MyIntentService extends IntentService...Intent(this, MyBroadcastReceiver.class); sendBroadcast(i); } } public class MyBroadcastReceiver extends BroadcastReceiver
那为啥还需要IntentService呢?.... 1.优点 本质上IntentService也是开了一个线程,但是IntentService是继承自Service的,所以根据Android系统Kill Application的机制,使用IntentService...当然可以,但是IntentService已经帮您封装好了,为什么还要自己再去实现IntentService的一套逻辑呢?...也就是说,如果您使用bindService方法启动IntentService,其实不会享受到IntentService的一点优点。...所以,第一步我会写一个BroadcastReceiver去监听网络的变化: 1public class NetworkReceiver extends BroadcastReceiver { 2
由于ANR对Activity和BroadcastReceiver响应时间的限制(Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10秒),使得在其中都不适合执行较耗时操作...广播信息给不同应用程序,但Content Provider更多用于数据的共享,BroadcastReceiver广播的信息会被所有应用接收较耗费系统资源,对于两个应用间动态的进行交互还需要通过Service...即下节要介绍的IntentService。...IntentService IntentService的概念 IntentService是Android中的一个系统封装类,继承自四大组件之一的Service,主要用于处理异步请求,实现多线程,它有以下特点...IntentService的创建 编写自己的Service类继承IntentService,并重写其中的onHandleIntent(Intent)方法,该方法是IntentService的一个抽象方法
我想使用具有对Activity的引用的动态注册BroadcastReceiver,以便它可以修改其UI。...这是显示问题的示例代码: package com.example; import android.app.Activity; import android.app.IntentService; import...android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import...public class RegisterBroadcastReceiver extends Activity { public static class MyIntentService extends IntentService...Intent(this, MyBroadcastReceiver.class); sendBroadcast(i); } } public class MyBroadcastReceiver extends BroadcastReceiver
今天,我将全面解析多线程其中一种常见用法:IntentService ---- 目录 ?...注意:若启动IntentService 多次,那么每个耗时操作则以队列的方式在 IntentService的onHandleIntent回调方法中依次执行,执行完自动结束。 ---- 4....问题1:IntentService如何单独开启一个新的工作线程 // IntentService源码中的 onCreate() 方法 @Override public void onCreate()...return null; } 在IntentService中,onBind()是默认返回null的,而采用bindService() 启动 IntentService的生命周期是:onCreate()...IntentService为Service的onStartCommand()方法提供了默认实现:将请求的intent添加到队列中 8.2 IntentService与其他线程的区别 IntentService
1、可接受多个广播,无论是系统还程序发送的广播都可以接收 2、实质上是系统级别的监听器 3、 发送广播就会触发与之匹配的接收广播,如果接收广播在10s内不能执行...
这就讲到了Android四大组件之一:BroadcastReceiver,翻译是广播接收者。意思就是接收广播用的。他可以接收到系统开机完成的广播,以及系统电量不足的广播,以及系统收到短信的广播,等等。...而在Android中的广播机制与现实中一样,发送广播的是Broadcast,接收广播的BroadcastReceiver及广播之间传递数据的Intent。...注册BroadcastReceiver接收广播 继承BroadcastReceiver 这是一个抽象类,public abstract class BroadcastReceiver { 实现抽象方法...public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive...BroadcastReceiver有两种注册方式: 静态注册(在AndroidManifest.xml清单文件中注册) 动态注册(在代码中注册) 广播接收者静态注册方式 当我们需要一直接收某种广播时
IntentService 一、IntentService概述 上一篇我们聊到了HandlerThread,本篇我们就来看看HandlerThread在IntentService中的应用,看本篇前建议先看看上篇的...HandlerThread,有助于我们更好掌握IntentService。...和构造方法,onHandleIntent为异步方法,可以执行耗时操作 二、IntentService的常规使用套路 大概了解了IntentService的特点后,我们就来了解一下它的使用方式,先看个案例...,然后去下载图片,注意即使我们多次启动IntentService,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent...以上便是IntentService德使用方式,怎么样,比较简单吧。接着我们就来分析一下IntentService的源码,其实也比较简单只有100多行代码。
IntentService的分析和用法,实用性介绍。...IntentService 简介 IntentService继承自Service,可用startService启动,也需要在AndroidManifest.xml中注册 IntentService在一个单独的...worker线程中处理任务 任务完成后,会自动停止 可多次启动同一个IntentService,它们会自一个接一个地排队处理 IntentService 与 Service 耗时任务可以不用在Service...当操作完成时,我们不用手动停止IntentService,它会自动判定停止。...IntentService 自动停止 参考IntentService源码: private volatile ServiceHandler mServiceHandler; private final
Activity启动过程可以分为两种:一种是根activity的启动过程,另一种是普通activity启动过程。
上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity...是5秒钟)的话,Android就会弹出错误(和Activity超时的错误相同),同时需要注意的是Activity、Service和BroadcastReceiver都是运行在本进程的主线程里面的。...所以总结一下:无论是 Activity、BroadcastReceiver还是Service,只要是有长时间处理的任务,就需要重新开一个线程来处理,为什么会这样?因为他们都是运行在主线程中的。...在使用BroadcastReceiver时还有一个我们需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )这第一个context...通过傻蛋测试发现: 如果你的BroadcastReceiver是通过在Activity中的this.registerReceiver(myBroadcaster, filter); 来注册的话,那么这个
可以通过Intent的方式开启IntentService,IntentService通过handler将每一个intent加入HandlerThread子线程中的消息队列,通过looper按顺序一个个的取出并执行...,执行完成后自动结束自己,不需要开发者手动关闭 IntentService是Service的子类,比普通的Service增加了额外的功能。...特点: IntentService会创建独立的worker线程来处理所有的Intent请求; 会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程的问题;...IntentService原理分析 普通 Service 在未指定进程的情况下和主线程运行在同一进程,并且也在主线程中,因此在这样的 Service 中做过多耗时操作也会阻塞UI线程。...因此,IntentService 中的消息是依次执行的,如果有很多任务并发执行,这些任务都会放在消息队列中,等待前一个任务执行完成后才能执行下一个任务。