后台服务(Service)简述

后台服务知识性干货

文章目录

目录

前言

一、简介

二、注册Service

三、连接Service

四、断开Service

五、 线程安全


前言

一些个人对后台服务的小总结,主要简单介绍后台服务并进行一些实现方法的讲解


一、简介

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()来销毁服务。

五、 线程安全

Android提供了一个线程安全的、继承自Service的IntentService类,继承它之后只需实现其onHandleIntent方法则可,该方法负责具体的工作任务。IntentService仅支持startService(),而不支持bindService()。每当有Activity连接上来时,它都会创建一个工作线程加入到由它管理的工作队列中。工作线程们依次调用onHandleIntent(),执行完毕后才轮到下一个。当所有的工作线程都干完活时,IntentService对象会自动销毁,以节省资源。

public class TestIntentService extends IntentService 
{
    public IntentService() 
    {
        super("随便");
    }

    protected void onHandleIntent(Intent intent)
    {
        /**
         * 工作线程们依次进来干活,执行完毕后才轮到下一个。
         * 任务相关信息会经由startService(intent)的参数传进来。
         */
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值