后台服务(Service)简述

本文介绍了Android中的Service,它是后台服务,用于执行不与用户交互的长时间操作。Service运行在主线程,需避免阻塞。Service需在AndroidManifest.xml注册,可通过startService或bindService连接。当所有Activity解绑,Service可能被销毁。IntentService是线程安全的子类,自动管理工作线程。
摘要由CSDN通过智能技术生成

一、简介

Service是应用的后台服务,它用来执行不需与用户交互的、耗时的操作,或者给其他应用提供一些功能。Service默认运行在用户界面(Activity)所在的主线程中,所以它的执行速度越快越好。如果有耗时较长或者会阻塞的操作,可以在Service中创建一个线程去完成它。若Service的执行时间超过5秒,系统会抛出“应用程序无响应(ANR)”的对话框。

二、注册Service

所有Service都应该在所在应用的AndroidManifest.xml中注册相应的标签,否则将无法被Activity连接(包括start和bind)。

<manifest ... >  

  ...  

  <application ... >  

      <service 
            <!-- 设置本服务的类名 -->
            android:name=".TestService" 
            <!-- 设置本服务作为一个单独的进程。省略这行代码的话,它将运行于主线程中 -->
            android:process=":任意名称"
            <!-- 是否接收其他应用的启动请求 -->
            android:exported="false"
      />  

      ...  

  </application>  

</manifest>

三、连接Service

Service可以同时被多个Activity经调用startService()或bindService()来连接,每次它都会以onStartCommand()或onBind()来响应,但其onCreate()只会在Service对象首次创建时调用。如果不想提供绑定,可以让onBind()返回null。

四、断开Service

绑定上的Activity可以调用unbindService()来解除绑定。当所有Activity都解绑后,系统就会调用服务的onUnbind()方法(若无其他Activity启动服务,则服务会被销毁)。启动服务的Activity可以调用stopService()来停止服务,服务也可以自己调用stopSelf()来停止,但这两种方法的前提是服务未被绑定。停止时,系统会调用onDestory()来销毁服务。

service_binding_tree_lifecycle.png

五、生命周期

Service的生命周期从onCreate()开始,到onDestroy()或者被系统杀死时结束。在空闲内存不足时,系统会杀掉一些进程,Service已启动的时间越长,越容易被系统杀死。在Service被可见进程所绑定期间,它所在的进程也将被认为是可见进程(除非绑定时另行指定),使得它的进程不那么容易被杀死。当Service正在运行onCreate()、onStartCommand()、onDestory()时,或者调用了startForeground(),系统会把它所在的进程当做前台进程,这样只有在极端低内存的情况下它的进程才会被杀死。

六、线程安全

Android提供了一个线程安全的、继承自Service的IntentService类,继承它之后只需实现其onHandleIntent方法则可,该方法负责具体的工作任务。Intent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值