首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Service介绍

如果服务已在运行,则不会调用方法,该方法调用一次。 onStartCommand():当另一个组件通过调用startService()请求启动服务,系统将调用方法。...onRebind():当旧组件与服务解绑后,另一个组件与服务绑定,onUnbind()返回true,系统将调用方法。...onStart() 或者 onStartCommand() 方法 特点: bind 方式开启服务,绑定服务调用者挂了,服务也会跟着挂掉。...IntentService处理异步请求一个类,在IntentService中有一个工作线程(HandlerThread)来处理耗时操作,启动IntentService方式和普通一样,不过当执行完任务之后...另外可以多次启动IntentService,每一个耗时操作都会以工作队列形式在IntentServiceonHandleIntent回调中执行,并且每次执行一个工作线程。

70640

Android 多线程-IntentService详解

其实是不会,因为IntentService真正执行异步任务是HandlerThread+Handler,每次启动都会把下载图片任务添加到依附消息队列中,最后由HandlerThread+Handler...其实IntentService启动后还会去调用onStartCommand方法,而onStartCommand方法又会去调用onStart方法,我们看看它们源码: @Override public void...(ServiceHandler本身就是一个异步处理handler类),在onHandleIntent方法执行结束后,IntentService会通过 stopSelf(int startId)方法来尝试停止服务...最后我们要知道每次执行一个后台任务就必须启动一次IntentService,而IntentService内部则是通过消息方式发送给HandlerThread,然后由Handler中Looper来处理消息...,而Looper是按顺序从消息队列中取任务,也就是说IntentService后台任务顺序执行,当有多个后台任务同时存在,这些后台任务会按外部调用顺序排队执行,我们前面的使用案例也很好说明了这点

57630

Android高频面试专题 - 基础篇(三)Service

实现原理 IntentService是Service一个子类,使用工作线程来处理所有的启动请求,但是一次只能处理一个。...其内部使用HandleThread实现,每次请求都会onStartCommand()里面向 ServiceHandler发送一个Message,在handleMessage内部调用onHandleIntent...随 后系统会尝试重新创建 service,由于服务状态为开始状态,所以创建服务后一定会调用 onStartCommand(Intent,int,int)方法。...使用这个返回值,如果在执行完 onStartCommand 后,服务被异 常 kill 掉,系统会自动重启该服务,并将 Intent 值传入。...7、onRebind()什么时候被调用 首先前提是onUnbind()方法返回true,此前该服务所有的绑定已经unBind(), 然后在客户端已连接到该服务就会调用。 8、前台服务是什么?

70621

intentservice使用(Intention)

stopSelf()方法才能让服务停止下来。...另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列方式在IntentService onHandleIntent 回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个...而且,所有请求都在一个单线程中,不会阻塞应用程序主线程(UI Thread),同一间只处理一个请求。 那么,用 IntentService 有什么好处呢?...为什么多次启动 IntentService 会顺序执行事件,停止服务后,后续事件得不到执行?...中使用 Handler、Looper、MessageQueue 机制把消息发送到线程中去执行,所以多次启动 IntentService 不会重新创建服务线程,只是把消息加入消息队列中等待执行

36720

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

回调方法中依次执行,执行完自动结束 接下来,我们将通过 源码分析 解决以下问题: IntentService 如何单独开启1个工作线程 IntentService 如何通过onStartCommand...() 将Intent 传递给服务 & 依次插入到工作队列中 问题1:IntentService如何单独开启1个工作线程 主要分析内容 = IntentService源码中 onCreate()方法...onStartCommand() 将Intent 传递给服务 & 依次插入到工作队列中 /** * onStartCommand()源码分析 * onHandleIntent() = 抽象方法...把 Intent参数 包装到 message obj 发送消息中, //这里Intent = 启动服务startService(Intent) 里传入 Intent msg.obj...()只会调用一次 = 只会创建1个工作线程; 当多次调用 startService(Intent)(即 onStartCommand()也会调用多次),其实不会创建工作线程,只是把消息加入消息队列中

56530

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

onHandleIntent() 方法处理完所有启动请求后自动停止服务,不需要我们调用 stopSelf() public void handleMessage(Message msg) {...仔细看下可以发现,这个 stopSelf() 方法传递了一个 id,这个 id 是启动服务 IActivityManager 分配 id,当我们调用 stopSelf(id) 方法结束服务,IActivityManager...IntentService 使用 通过前面的源码分析,我们可以看到,最终每个任务处理都会调用 onHandleIntent(),因此使用 IntentService 也很简单,只需实现 onHandleIntent...在第一次启动 IntentService 后,IntentService 仍然可以接受请求,接受到请求被放入了工作队列中,等待被串行执行。...使用 IntentService 显著简化了启动服务实现,如果您决定还重写其他回调方法(如 onCreate()、onStartCommand() 或 onDestroy()),请确保调用超类实现,以便

96490

Android多线程:IntentService用法&源码分析

源码分析 接下来,我们会通过源码分析解决以下问题: IntentService如何单独开启一个工作线程; IntentService如何通过onStartCommand()传递给服务intent被依次插入到工作队列中...问题1:IntentService如何单独开启一个工作线程 // IntentService源码中 onCreate() 方法 @Override public void onCreate()...当多次调用 startService(Intent) onStartCommand也会调用多次)其实并不会创建工作线程,只是把消息加入消息队列中等待执行,所以,多次启动 IntentService...,否则会引起ANR; IntentService:创建一个工作线程来处理多线程任务    Service需要主动调用stopSelft()来结束服务,而IntentService不需要(在所有intent...IntentService为ServiceonStartCommand()方法提供了默认实现:将请求intent添加到队列中 8.2 IntentService与其他线程区别 IntentService

68020

Android-Service详解

可以理解为 Service是不能直接处理耗时操作,如果直接把耗时操作放在 Service onStartCommand() 中,很容易引起 ANR;如果有耗时操作就必须开启一个单独线程来处理。...IntentService 是继承于 Service 并处理异步请求一个类,在 IntentService 内有一个工作线程来处理耗时操作, 启动 IntentService 方式和启动传统 Service...另外,可以启动 IntentService 多次,而每一个耗时操作会以工作队列方式在IntentService onHandleIntent 回调方法中执行, 并且,每次只会执行一个工作线程,执行完第一个再执行第二个...} /** * 首次创建服务,系统将调用方法来执行一次性设置程序(在调用 onStartCommand() 或 onBind() 之前)。...被调用"); super.onCreate(); } ​ /** * 每次通过startService()方法启动Service都会被回调。

66910

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

bindService()方法绑定服务,该方法将会被系统调用。   ...()onUnbind():当一个组件想通过bindService()方法绑定服务,该方法将会被系统调用。 ()onCreate():当服务第一次被创建,该方法将会被系统调用。...该方法onStartCommand()或onBind()方法之前调用 ()onBind():这是一个必须实现方法。当一个组件想通过bindService()方法绑定服务,该方法将会被系统调用。...如果用户不允许绑定,那么只需要返回null ()onStartCommand():当组件通过StartService()方法请求服务启动,该方法将被系统调用。...消息机制是一种实现进程间通信最简单方式,因为所有的请求都会放到一个消息队列当中去进行轮询处理(意思就是单线程啦),每次处理一个服务请求,这样就不要保证你设计service需要保证是线程安全状态

48520

Android 四大组件学习之Service五

不是已经有了Service,那为什么还要引入IntentService呢?...既然现象已经看了,我总结一下: Service与IntentService之间区别 在这之前,需要知道Service不足之处 a: Service不是专门一条线程,因此不应该在Service中处理相当耗时任务...a:IntentService会使用一个队列来关联Intent请求,每当Activity请求启动IntentServiceIntentService会将该请求加入一个队列,然后开启一个线程去处理请求...所以IntentService不会把主线程卡死 b:IntentService会创建单独线程处理onHandleIntent()方法实现代码 c:同时IntentService不用重写onBind..., OnStartCommand方法,只需实现onHandleIntent()方法 d:当所以请求处理完后,Intent后自动停止服务,无需手动停止服务

17030

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

activity 请求服务启动,系统会调用这个方法。...如果只想提供绑定,不需要自己实现这个方法。 onBind() 当有其他组件想通过 bindService() 方法绑定这个服务系统就会调用方法。...继承IntentService 大多数服务不需要同时处理多个请求,继承IntentService是最好选择 IntentService处理流程 创建默认一个worker线程处理传递给onStartCommand...,如onCreate(),onStartCommand()等,一定要调用super()方法,保证IntentService正确处理worker线程,只有onHandleIntent()和onBind()...所以在服务里加代码是无法被调用处理这个情况唯一方法是屏蔽掉force stop和uninstall按钮,让其不可用。方法自己去找吧。

3.8K11

Android开发笔记(四十一)Service生命周期

返回值true表示希望以后再绑定时能够调用onRebind方法,false表示再绑定时不调用onRebind方法 最简单服务启动顺序:onCreate->onStartCommand 最简单服务退出顺序...2、绑定服务,只调用onBind方法或者onRebind方法,不调用onStart和onStartCommand方法。...IntentService是Service子类,它通过Looper和Thread来解决Service中处理逻辑阻塞问题。...使用IntentService与Service代码区别如下: 1、服务类从继承Service改为继承IntentService; 2、增加一个构造方法,为是给内部线程分配唯一名称,示例代码如下...,把需要异步处理代码写进去; 4、onStartCommand方法中记得调用父类onStartCommand,因为Service类没有具体实现该方法IntentService有具体实现,示例代码如下

43740

Android四大组件之一Service

一个Service可以被多个服务绑定,当它们都解绑服务被销毁 Service类中重要方法 onStartCommand():当组件调用startService(),系统调用方法。...如果开发人员实现该方法,需要调用stopSelf()或stopService()来停止服务 onBind():当组件调用bindService(),系统调用方法。...可以实现如下任务: 创建区别于主线程线程来执行发送到onStartCommand()方法全部Intent 创建工作队列,每次传递一个Intent到onHandleIntent() 所有请求处理完毕后停止服务...也就是自动生成return语句不能改 2.继承Service类 使用IntentService将简化启动服务实现,但如果要处理多线程,则可以继承Service来处理各个Intent 对于每次启动请求...bindService()方法,传递ServiceConnection实现 当系统调用ServiceConnection,可以使用接口定义方法回调服务 调用unbindService()方法解除绑定

68630

【Android从零单排系列三十七】《Android四大组件——Service》

同步与异步: 服务默认在主线程中运行,如果执行耗时操作,需要在服务内部创建线程来处理任务,以避免阻塞主线程。...在调用startService(),系统会调用服务onCreate()和onStartCommand()方法。 在Service中进行后台任务处理或持续性工作。...在调用bindService(),系统会调用服务onBind()方法,返回一个实现了IBinder接口对象,供调用方与服务进行通信。...onStartCommand():在每次通过startService()启动服务调用,可执行后台任务或处理持续性工作。返回值用于定义服务启动行为。...案例,通过startService()方法启动服务,并在onStartCommand()方法处理任务。

19410

IntentService使用及源码分析

这里我们以startService()为例分析,从我们启动一个IntentService调用过程大概是这样, 构造方法 ->onCreate()- >onStartCommand()- >onStart...mName = name; } 其实很简单,只是调用父类构造方法,并保存我们那么字段 2)接着我们来看我们onCreate方法做了什么?...()里面有调用onHandleIntent()去处理我们Intent,这就是为什么我们需要重写onHandleIntent原因。...我们知道多次调用context.startService方法,不会多次调用我们onCreate()方法,但会调用我们onStart()方法,而在我们onStart()方法里面我们调用mServiceHandler.sendMessage...这个就很简单了,因为在处理完信息以后,会调用stopSelf去停止相应服务

32400

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

() 方法实现代码,无需处理多线程问题 所有请求处理完成后,IntentService 会自动停止,无需调用 stopSelf() 方法停止 Service 为 Service onBind...4.3.5 是一个基于消息服务 每次启动该服务并不是马上处理工作,而是首先会创建对应 Looper ,Handler 并且在 MessageQueue 中添加附带客户 Intent Message...() 方法实现代码,无需处理多线程问题; 所有请求处理完成后,IntentService会自动停止,无需调用 stopSelf() 方法停止 Service ; 第五篇:Service 与...6.2.2 START_NOT_STICKY : “非粘性”。 使用这个返回值 , 如果在执行完 onStartCommand 后 , 服务被异常 kill 掉 ,系统不会自动重启该服务。...使用这个返回值,如果在执行完 onStartCommand 后,服务被异常 kill 掉 系统会自动重启该服务 , 并将 Intent 值传入。

90210

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

系统会尽快销毁服务。 绑定服务 当应用组件通过调用bindService()绑定到服务服务即处于绑定状态。...所有请求处理完成后,IntentService 会自动停止,无需调用 stopSelf() 方法停止 Service; 为 ServiceonBind() 提供默认实现,返回 null; 为 Service...使用这个返回值,如果在执行完 onStartCommand 后,服务被异 常 kill 掉,系统会自动重启该服务,并将 Intent 值传入。...Service不是一条线程,因此不应该在Service中直接处理耗时任务。 IntentService正好弥补了Service不足。...IntentService会创建单独worker线程来处理onHandleIntent()方法实现代码,因此开发者无须处理多线程问题。

4.5K30

安卓应用安全指南 4.4.3 创建使用服务高级话题

在这种情况下,当应用 C 发送隐式意图,私有服务(A-1)调用失败。 另一方面,由于应用 A 可以通过隐式意图,按照预期成功调用应用内私有服务,因此在安全性(恶意软件对策)方面不会有任何问题。...它继承了Service类,并通过onStartCommand执行过程。 在用户方,服务意图指定,并通过startService调用。...安全性检查应该由onStartCommand完成,但不能用于伙伴服务,因为无法获取来源软件包名称。 IntentService类型 IntentService是通过继承Service创建类。...调用方法与startService类型相同。 以下是与标准服务(startService类型)相比较特征。 意图处理由onHandleIntent完成(不使用onStartCommand)。...由于过程是由另一个线程执行,因此调用会立即返回,并且面向意图过程由队列系统顺序执行。 每个意图并不是并行处理,但根据产品要求,它也可以作为选项来选择,来简化实现。

95320
领券