当然可以,但是IntentService已经帮您封装好了,为什么还要自己再去实现IntentService的一套逻辑呢?...IntentService会在任务执行完成后自行结束自己,而不需要外部去调用stopService了。 . 2.正确使用的姿势 优点我们已经知道了,那该如何正确的使用呢?...当然喽,IntentService是继承自Service的,自然也是可以通过上面两种方式启动。但是呢,是不建议使用bindService去启动的。为什么呢?...因为只有handleMessage方法调用后才会调用onHandleIntent方法去处理任务。那么IntentService在哪里去调用Handler的handleMessage方法的呢?...onHandleIntent根本不会调用,和启动一个普通的Service没两样。 综上,我们应该使用startService的方式启动IntentService。
Bound服务是组将通过bindService()来绑定服务 ()一般来说Started服务执行单一的操作,不返回结果给调用组件。...bindService()方法绑定服务时,该方法将会被系统调用。 ...()onUnbind():当一个组件想通过bindService()方法绑定服务时,该方法将会被系统调用。 ()onCreate():当服务第一次被创建时,该方法将会被系统调用。...()即使我们多次启动IntentService,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent执行异步任务...()创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作。
IntentService 今天,我将全面解析多线程其中一种常见用法:IntentService ---- 目录 ?...onHandleIntent((Intent)msg.obj); //onHandleIntent 处理完成后 IntentService会调用 stopSelf() 自动停止。...当多次调用 startService(Intent) 时(onStartCommand也会调用多次)其实并不会创建新的工作线程,只是把消息加入消息队列中等待执行,所以,多次启动 IntentService...对比 8.1 IntentService与Service的区别 从属性 & 作用上来说 Service:依赖于应用程序的主线程(不是独立的进程 or 线程) 不建议在Service中编写耗时的逻辑和操作...因为你的鼓励是我写作的最大动力!
大家好,又见面了,我是你们的朋友全栈君。 IntentService浅析 说起IntentService就需要先了解一下Service。 Service 是长期运行在后台的应用程序组件。...如: public void run() { /** * 耗时的代码在子线程里面写 */ stopSelf(); } 或者在代码里的某个地方调用stopService...另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...或 Messenger 使得 IntentService 和 Activity 可以通信,这样那么 onHandleIntent() 不会被回调,相当于在你使用 Service 而不是 IntentService...为什么多次启动 IntentService 会顺序执行事件,停止服务后,后续的事件得不到执行?
和构造方法,onHandleIntent为异步方法,可以执行耗时操作 二、IntentService的常规使用套路 大概了解了IntentService的特点后,我们就来了解一下它的使用方式,先看个案例...,然后去下载图片,注意即使我们多次启动IntentService,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent...时,它的onCreate方法将会被调用,其内部会去创建一个HandlerThread并启动它,接着创建一个ServiceHandler(继承Handler),传入HandlerThread的Looper...其实IntentService启动后还会去调用onStartCommand方法,而onStartCommand方法又会去调用onStart方法,我们看看它们的源码: @Override public void...,而Looper是按顺序从消息队列中取任务的,也就是说IntentService的后台任务时顺序执行的,当有多个后台任务同时存在时,这些后台任务会按外部调用的顺序排队执行,我们前面的使用案例也很好说明了这点
大家好,又见面了,我是你们的朋友全栈君。...先看IntentService的成员变量: String mName ; 这是IntentService所在线程的名字,可在声明一个IntentService的时候,用IntentService的构造方法...当实例化了一个IntentService后,后走onCreate()、onStart(),当用Intent开启一个Service时,会调用onStartCommand()。...onHandleIntent((Intent)msg.obj); stopSelf(msg.arg1); // 执行完后就停止服务 } 从这里调用到了onHandleIntent...START_REDELIVER_INTENT : START_NOT_STICKY; } Service类从这里接收到Intent对象,然后调用onStart()方法,就执行到了onHandleIntent
今天,我将全面解析多线程其中一种常见用法:IntentService Carson带你学多线程系列 基础汇总 Android多线程:基础知识汇总 基础使用 Android多线程:继承Thread...源码分析 IntentService的源码工作流程如下: 特别注意:若启动IntentService 多次,那么 每个耗时操作 则 以队列的方式 在 IntentService的 onHandleIntent...()只会调用一次 = 只会创建1个工作线程; 当多次调用 startService(Intent)时(即 onStartCommand()也会调用多次),其实不会创建新的工作线程,只是把消息加入消息队列中...3, 所以,多次启动 IntentService 会按顺序执行事件 若服务停止,则会清除消息队列中的消息,后续的事件不执行 注意事项2:不建议通过 bindService() 启动 IntentService...() 即,并不会调用onStart() 或 onStartcommand(),故不会将消息发送到消息队列,那么onHandleIntent()将不会回调,即无法实现多线程的操作 此时,你应该使用Service
其实跟普通的Service差不多 1)自定义一个MyIntentService集成IntentService,重写构造方法和onHandleIntent方法,在HandleIntent里面执行我们的耗时任务等操作...这里我们以startService()为例分析,从我们启动一个IntentService,调用的过程大概是这样的, 构造方法 ->onCreate()- >onStartCommand()- >onStart...发送信息(mServiceHandler.sendMessage(msg);),这样在我们handleMessage()里面讲可以收到我们的信息,在handleMessage()里面有调用onHandleIntent...()去处理我们的Intent,这就是为什么我们需要重写onHandleIntent的原因。...我们知道多次调用context.startService方法,不会多次调用我们的onCreate()方法,但会调用我们的onStart()方法,而在我们的onStart()方法里面我们调用mServiceHandler.sendMessage
而IntentService就是解决这个问题的,它是Service的一个抽象子类,需要实现onHandleIntent,代码在这个函数中执行。...它与Service最大的不同就是默认开启一个子线程,而onHandleIntent就是在子线程中执行的。 所以IntentService就是一个自带子线程的Service。...((Intent)msg.obj); stopSelf(msg.arg1); } } 复制代码 可以看到在handleMessage中调用了onHandleIntent,这样函数中的代码就在这个...上面我们说过stopSelf会试图停止服务,为什么是试图而不是一定,关键就是startId这里。...但是注意,在onBind函数中并没有sendMessage,所以IntentService需要使用start的方式,bind的方式由于不会走onStart这个周期,所以onHandleIntent不会执行
必须要调用的unbindService(ServiceConnection)。 Q1:为什么我们一定要调用这个方法,如果我们不解绑会出现什么样的问题?...这也是为什么我们一直说需要解绑的原因。...另外看到了ServiceHandler中的stopSelf()方法,我们也就清楚了一个问题为什么我们不需要去控制IntentService的暂停。...,更何况我也就低分飘过6级的水平呢,哈哈哈哈!!...(具体看你怎么进行回答,主要还是一个知识点,Service运行在主线程) Service存在的原因是Activity是一个频繁会被创建、销毁的组件,虽然我们同样可以通过Thread进行异步操作,但是当Activity
startId 以消息的形式发送到 Handler 在 Handler 中将消息队列中的 Intent 按顺序传递给 onHandleIntent() 方法 在处理完所有启动请求后自动停止服务,不需要我们调用...(msg.arg1); } 有同学可能有疑问,在 handleMessage 方法中不是调用了一次 onHandleIntent() 后就调用 stopSelf() 了吗,这不是只能执行一个任务么?...此外还要注意的是,IntentService 中除了 onHandleIntent 方法其他都是运行在主线程的。...IntentService 的使用 通过前面的源码分析,我们可以看到,最终每个任务的处理都会调用 onHandleIntent(),因此使用 IntentService 也很简单,只需实现 onHandleIntent...可以看到,调用方的代码和上一篇使用 HandlerThread 的方法很相似。
注意: 当AsyncTask 任务被取消时,回调 onCanceled(obj) ,此时 onPostExecute(),不会被调用,AsyncTask 中的 cancel() 方法并不是真正去取消任务...,除了当前执行的任务外,后续的任务不会被执行。...mServiceLooper.quit(); } /** * 不建议通过 bind 启动 IntentService ,如果通过 bind 启动 IntentService ,...*/ @WorkerThread protected abstract void onHandleIntent(@Nullable Intent intent); } IntentService...,任务会被一次串行执行,执行结束后,服务停止; 多次启动 IntentService ,在所有任务执行结束之前,停止 IntentService ,服务停止,除了当前执行的任务外,后续的任务不会被执行
另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...,有一个onHandleIntent的方法,这个就是根据不同action来进行操作的,所以我们可以通过在onHandleIntent中来初始化一些耗时的操作,然后在application中onCreate...那么问题来了,有人会说,我怎么知道IntentService什么时候初始化完啊?而且这个是异步的,如何还没初始化完app就进入了主界面,就会出现第三方库或者其他异常了啊?...(ps:其实这样的第三方库真的是脑残,为什么非要在application中初始化呢?...),发散思维,总会有一些方法会被你找到去解决遇到的问题的。
定义IntentService的子类:传入线程名称、重写 onHandleIntent()方法 public class MyIntentService extends IntentService {...()方法在工作线程中执行,执行完后调用stopSelf方法关掉Service onHandleIntent((Intent)msg.obj); stopSelf...在调用stopSelf()时,实际调用的是stopSelf(-1),那么将直接销毁Service,系统就不会检测是否还有其他的startId存在。...onHandleIntent(); 通过 onHandleIntent()来依次处理所有Intent请求对象所对应的任务。...Service需要主动调用 stopSelf()来结束服务,而IntentService不需要(在所有Intent处理完后,系统会自动关闭服务)。
由于ANR对Activity和BroadcastReceiver响应时间的限制(Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10秒),使得在其中都不适合执行较耗时操作...默认值是true,一般情况下,我们都会需要实例化,所以也可以选择不设置。 exported属性:用于指示该服务是否能够被其他应用程序组件调用或跟它交互。...创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作。...IntentService的创建 编写自己的Service类继承IntentService,并重写其中的onHandleIntent(Intent)方法,该方法是IntentService的一个抽象方法...的测试活动,并在点击按钮时调用startService系统函数来开启IntentService的服务,示例代码如下: public class TgsActivity extends Activity
另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...,有一个onHandleIntent的方法,这个就是根据不同action来进行操作的,所以我们可以通过在onHandleIntent中来初始化一些耗时的操作,然后在application中onCreate...那么问题来了,有人会说,我怎么知道IntentService什么时候初始化完啊?而且这个是异步的,如何还没初始化完app就进入了主界面,就会出现第三方库或者其他异常了啊?...(ps:其实这样的第三方库真的是脑残,为什么非要在application中初始化呢?...,不要一味说什么不符合逻辑不符合代码规范(不过一些最基本的代码规范还是要遵循的,因为代码写出来不只是给自己看的),发散思维,总会有一些方法会被你找到去解决遇到的问题的。
不是已经有了Service,那为什么还要引入IntentService呢?...既然现象已经看了,我总结一下: Service与IntentService之间的区别 在这之前,需要知道Service的不足之处 a: Service不是专门的一条新的线程,因此不应该在Service中处理相当耗时的任务...a:IntentService会使用一个队列来关联Intent的请求,每当Activity请求启动IntentService时,IntentService会将该请求加入一个队列,然后开启一个新的线程去处理请求...所以IntentService不会把主线程卡死 b:IntentService会创建单独的线程处理onHandleIntent()方法里的实现代码 c:同时IntentService不用重写onBind..., OnStartCommand方法,只需实现onHandleIntent()方法 d:当所以的请求处理完后,Intent后自动停止服务,无需手动停止服务
IntentService 的特点 自动管理生命周期 IntentService 在完成所有任务后会自动停止,不需要手动调用 stopService。...使用 IntentService 创建 IntentService 创建一个 IntentService 需要继承该类,并实现构造函数和 onHandleIntent 方法。...在完成所有任务后,IntentService 会调用 onDestroy 方法。 线程管理 工作线程的创建和管理由 IntentService 自动处理,开发者无需担心多线程相关的细节。...public class MyIntentService extends IntentService { // 构造函数和onHandleIntent方法的实现... } 传递数据 通过 Intent...// 示例代码:使用广播通知界面更新 public class MyIntentService extends IntentService { // onHandleIntent方法中任务完成后发送广播
今天,我将手把手教你使用IntentService(含实例介绍)。...使用步骤 步骤1:定义 IntentService的子类,需复写onHandleIntent()方法 步骤2:在Manifest.xml中注册服务 步骤3:在Activity中开启Service服务...实例讲解 步骤1:定义 IntentService的子类 传入线程名称、复写onHandleIntent()方法 public class myIntentService extends IntentService...{ /** * 在构造函数中传入线程名字 **/ public myIntentService() { // 调用父类的构造函数 /...对比 此处主要讲解IntentService与四大组件Service、普通线程的区别。 6.1 与Service的区别 ? 6.2 与其他线程的区别 ? ---- 7.
那就看ServiceHandler,其继承自Handler,handleMessage方法中先调用了抽象方法onHandleIntent((Intent)msg.obj),参数就是启动service的intent...所以IntentService 的子类必须要重写onHandleIntent,并处理这个intent。...maximumPoolSize,最大线程数,当活动线程到达这个数,后续的新任务会被阻塞。 keepAliveTime,非核心线程闲置时 的超时时长。非核心线程闲置时间超过此时间就会被回收。...因为不会被回收,所以能快速执行外界请求。...当整个线程池空闲时 所有线程都会被回收,不占用系统资源。
领取专属 10元无门槛券
手把手带您无忧上云