前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓四大组件之Service-服务

安卓四大组件之Service-服务

作者头像
Youngxj
发布2018-06-07 15:32:28
4550
发布2018-06-07 15:32:28
举报
文章被收录于专栏:YoungxjYoungxjYoungxj

1、Service是否在主线程中执行,service里面是否能执行耗时的操作?

默认情况下,如果没有特殊指定Service所运行的进程,那么Service的Activity是运行在当前app所在进程的主线程里面的。不仅仅是服务,其实四大组件都是。

主线程不能执行耗时操作(网络请求,拷贝数据库,复制下载大文件)

特殊情况下,可以在清单文件中配置service所在的进程,让service在另外的进程中执行

<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>

2、Activity怎么和Service绑定,怎么在Activity中启动自己对象的Service?

Activity通过bindService(intent service,ServiceConnecton conn,int flags)跟Service进行绑定,当绑定成功的时候,Service会将代理对象通过回调的形式传递给conn,这样我们就可以拿到Service提供的服务代理对象。

在Activity中两种方式可以开启Service,一种是StartService、一种是bindService,如果需要拿到拿到我们的服务对象,并且去调用里面的方法的时候我们必须使用bind模式开启服务,比如第三方支付,音乐播放等,但是,如果只是需要简简单单的开启一个后台运行的服务的话,我们可以直接使用startService来开启。

3、Service的生命周期

对于Service,不同的开启方式,对应的生命周期也是不同的。

非绑定模式开启:执行onCreate方法后执行onStartCommand,在service被关闭销毁的时候调用onDestroy方法。

绑定模式开启:执行onCreate方法后执行onBind方法,在销毁的时候调用onUnbind和onDestroy方法

上面的两种serviece的生命周期是在相对单纯的情况下来说的,需要注意的是,service的实例只会有一个,也就是说,如果我们当前想要开启的这个service已经存在,那么这一次的开启将不会再调用onCreate方法来实例化!

一个service可以被多个客户所绑定,只有当所有的绑定对象的onbind方法全部执行完了以后,这个service才有机会被销毁,打个比方说,当很多的客户都调用了unbind方法以后,那么如果其中一个客户却调用了onstart方法,那么这个sercice也不会被销毁,也就说说,当所有的客户的去求都完成的时候,才可以销毁服务。

1.png
1.png

这两种开启服务的方式,并不是完全没有互斥的,他们可以联合开启,比如我们已经用startService开启了一个服务,我们在后面的逻辑中需要调用服务中的方法,那么我们还可以在用bindService来再开启一次,两次开启并不闹矛盾,在这种情况下,我们并不能通过stopself或者stopservice方法来停止我们的服务,必须是我们的所有的客户都解除了对这个服务的绑定后才行。

4、什么是IntentService?有什么优点?

IntentService是Service的子类,比普通的Service增加了功能,Service只能运行在当前应用程序的主线程中,不能在其中处理耗时的操作。

IntentService的特征:

会独立创建一个work线程处理所有的intent请求,会处理onHandleIntent方法中的代码,无需处理多线程的问题,并且在处理完所有的intent请求后,会自动销毁,不需要调用stopService方法来停止。

5、Activity、Service、intent之间有什么关系?

前两个属于兄弟关系,因为他们都继承自ContextWrapper类(Context的子类),但是他们各有各的本事,一个负责界面的交互,一个负责在后台运行。intent可以在他们两者之间进行数据交换,可以看做是一个通讯使者。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档