首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

正确使用IntentService的姿势

当然可以,但是IntentService已经帮您封装好了,为什么还要自己再去实现IntentService的一套逻辑呢?...IntentService会在任务执行完成后自行结束自己,而不需要外部去调用stopService了。 . 2.正确使用的姿势 优点我们已经知道了,那该如何正确的使用呢?...当然喽,IntentService是继承自Service的,自然也是可以通过上面两种方式启动。但是呢,是不建议使用bindService去启动的。为什么呢?...因为只有handleMessage方法调用后才会调用onHandleIntent方法去处理任务。那么IntentService在哪里去调用Handler的handleMessage方法的呢?...onHandleIntent根本不会调用,和启动一个普通的Service没两样。 综上,我们应该使用startService的方式启动IntentService。

2.3K20

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

Bound服务是组将通过bindService()来绑定服务 ()一般来说Started服务执行单一的操作,不返回结果给调用组件。...bindService()方法绑定服务时,该方法将会被系统调用。   ...()onUnbind():当一个组件想通过bindService()方法绑定服务时,该方法将会被系统调用。 ()onCreate():当服务第一次被创建时,该方法将会被系统调用。...()即使我们多次启动IntentService,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent执行异步任务...()创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作。

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

    intentservice使用(Intention)

    大家好,又见面了,我是你们的朋友全栈君。 IntentService浅析 说起IntentService就需要先了解一下Service。 Service 是长期运行在后台的应用程序组件。...如: public void run() { /** * 耗时的代码在子线程里面写 */ stopSelf(); } 或者在代码里的某个地方调用stopService...另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...或 Messenger 使得 IntentService 和 Activity 可以通信,这样那么 onHandleIntent() 不会被回调,相当于在你使用 Service 而不是 IntentService...为什么多次启动 IntentService 会顺序执行事件,停止服务后,后续的事件得不到执行?

    43330

    Android 多线程-IntentService详解

    和构造方法,onHandleIntent为异步方法,可以执行耗时操作 二、IntentService的常规使用套路 大概了解了IntentService的特点后,我们就来了解一下它的使用方式,先看个案例...,然后去下载图片,注意即使我们多次启动IntentService,但IntentService的实例只有一个,这跟传统的Service是一样的,最终IntentService会去调用onHandleIntent...时,它的onCreate方法将会被调用,其内部会去创建一个HandlerThread并启动它,接着创建一个ServiceHandler(继承Handler),传入HandlerThread的Looper...其实IntentService启动后还会去调用onStartCommand方法,而onStartCommand方法又会去调用onStart方法,我们看看它们的源码: @Override public void...,而Looper是按顺序从消息队列中取任务的,也就是说IntentService的后台任务时顺序执行的,当有多个后台任务同时存在时,这些后台任务会按外部调用的顺序排队执行,我们前面的使用案例也很好说明了这点

    64130

    Android多线程:深入剖析IntentService源码

    今天,我将全面解析多线程其中一种常见用法:IntentService Carson带你学多线程系列 基础汇总 Android多线程:基础知识汇总 基础使用 Android多线程:继承Thread...源码分析 IntentService的源码工作流程如下: 特别注意:若启动IntentService 多次,那么 每个耗时操作 则 以队列的方式 在 IntentService的 onHandleIntent...()只会调用一次 = 只会创建1个工作线程; 当多次调用 startService(Intent)时(即 onStartCommand()也会调用多次),其实不会创建新的工作线程,只是把消息加入消息队列中...3, 所以,多次启动 IntentService 会按顺序执行事件 若服务停止,则会清除消息队列中的消息,后续的事件不执行 注意事项2:不建议通过 bindService() 启动 IntentService...() 即,并不会调用onStart() 或 onStartcommand(),故不会将消息发送到消息队列,那么onHandleIntent()将不会回调,即无法实现多线程的操作 此时,你应该使用Service

    61230

    IntentService使用及源码分析

    其实跟普通的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

    37300

    IntentService详解

    而IntentService就是解决这个问题的,它是Service的一个抽象子类,需要实现onHandleIntent,代码在这个函数中执行。...它与Service最大的不同就是默认开启一个子线程,而onHandleIntent就是在子线程中执行的。 所以IntentService就是一个自带子线程的Service。...((Intent)msg.obj); stopSelf(msg.arg1); } } 复制代码 可以看到在handleMessage中调用了onHandleIntent,这样函数中的代码就在这个...上面我们说过stopSelf会试图停止服务,为什么是试图而不是一定,关键就是startId这里。...但是注意,在onBind函数中并没有sendMessage,所以IntentService需要使用start的方式,bind的方式由于不会走onStart这个周期,所以onHandleIntent不会执行

    47320

    Android 进阶16:IntentService 使用及源码解析

    startId 以消息的形式发送到 Handler 在 Handler 中将消息队列中的 Intent 按顺序传递给 onHandleIntent() 方法 在处理完所有启动请求后自动停止服务,不需要我们调用...(msg.arg1); } 有同学可能有疑问,在 handleMessage 方法中不是调用了一次 onHandleIntent() 后就调用 stopSelf() 了吗,这不是只能执行一个任务么?...此外还要注意的是,IntentService 中除了 onHandleIntent 方法其他都是运行在主线程的。...IntentService 的使用 通过前面的源码分析,我们可以看到,最终每个任务的处理都会调用 onHandleIntent(),因此使用 IntentService 也很简单,只需实现 onHandleIntent...可以看到,调用方的代码和上一篇使用 HandlerThread 的方法很相似。

    1K90

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

    另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...,有一个onHandleIntent的方法,这个就是根据不同action来进行操作的,所以我们可以通过在onHandleIntent中来初始化一些耗时的操作,然后在application中onCreate...那么问题来了,有人会说,我怎么知道IntentService什么时候初始化完啊?而且这个是异步的,如何还没初始化完app就进入了主界面,就会出现第三方库或者其他异常了啊?...(ps:其实这样的第三方库真的是脑残,为什么非要在application中初始化呢?...),发散思维,总会有一些方法会被你找到去解决遇到的问题的。

    1.1K20

    Android Service的解析

    由于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

    15010

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

    另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...,有一个onHandleIntent的方法,这个就是根据不同action来进行操作的,所以我们可以通过在onHandleIntent中来初始化一些耗时的操作,然后在application中onCreate...那么问题来了,有人会说,我怎么知道IntentService什么时候初始化完啊?而且这个是异步的,如何还没初始化完app就进入了主界面,就会出现第三方库或者其他异常了啊?...(ps:其实这样的第三方库真的是脑残,为什么非要在application中初始化呢?...,不要一味说什么不符合逻辑不符合代码规范(不过一些最基本的代码规范还是要遵循的,因为代码写出来不只是给自己看的),发散思维,总会有一些方法会被你找到去解决遇到的问题的。

    1.7K00

    Android 四大组件学习之Service五

    不是已经有了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后自动停止服务,无需手动停止服务

    18630

    Android IntentService的开发技巧

    IntentService 的特点 自动管理生命周期 IntentService 在完成所有任务后会自动停止,不需要手动调用 stopService。...使用 IntentService 创建 IntentService 创建一个 IntentService 需要继承该类,并实现构造函数和 onHandleIntent 方法。...在完成所有任务后,IntentService 会调用 onDestroy 方法。 线程管理 工作线程的创建和管理由 IntentService 自动处理,开发者无需担心多线程相关的细节。...public class MyIntentService extends IntentService { // 构造函数和onHandleIntent方法的实现... } 传递数据 通过 Intent...// 示例代码:使用广播通知界面更新 public class MyIntentService extends IntentService { // onHandleIntent方法中任务完成后发送广播

    35310
    领券