Android——Service浅析

  • Service是Android程序中四大基础组件之一
  • 适用于去执行那些不需要和用户交互而且还要求长期运行的任务
  • Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,不要在Service中执行耗时的操作

1. Service分类

按运行地点分类:
在这里插入图片描述
按运行类型分类:
在这里插入图片描述
按使用方式分类:
在这里插入图片描述

2. Service 方法

手动调用:
在这里插入图片描述
自动调用
在这里插入图片描述

3. Service 生命周期

在这里插入图片描述

  • OnCreate()
    系统在service第一次创建时执行此方法,来只运行一次的初始化工作。
  • onStartCommand()
    每次客户端调用startService()方法启动该Service都会回调该方法(多次调用)。一旦这个方法执行,service就启动并且在后台长期运行。通过调用stopSelf()或stopService()来停止服务。
  • OnBind()
    当组件调用bindService()想要绑定到service时(比如想要执行进程间通讯)系统调用此方法
    (一次调用,一旦绑定后,下次再调用bindService()不会回调该方法)
    在你的实现中,你必须提供一个返回一个IBinder来以使客户端能够使用它与service通讯,你必须总是实现这个方法,但是如果你不允许绑定,那么你应返回null。
  • OnUnbind()
    当前组件调用unbindService(),想要解除与service的绑定时系统调用此方法
    (一次调用,一旦解除绑定后,下次再调用unbindService()会抛出异常)
  • OnDestory()
    系统在service不再被使用并要销毁时调用此方法(一次调用)。service应在此方法中释放资源,比如线程,已注册的侦听器,接收器等等.这是service收到的最后一个调用。

生命周期的调用:

  • 启动服务(startService)
    完整:onCreate()->onStartCommand()->onDestroy()
    单次:onCreate()->onStartCommand()
    多次:onStartCommand()->onStartCommand()->…
    多次启动时onCreate只执行一次,onStartCommand执行多次
  • 停止服务(stopService)
    onDestroy()
  • 绑定服务(bindService)
    完整:onCreate()->onBind()->onUnbind()->onDestory
    onCreate()->onBind()
  • 解绑服务(unbindService)
    onUnbind()->onDestory()
  • 先绑定后启动
    完整:onCreate()->onBind()->onStartCommand()->onUnbind()->onDestory
    绑定:onCreate()->onBind()->onStartCommand()
    解绑:onUnbind()->onDestory()
  • 先解绑再绑定
    完整:onUnbind()->onRebind()

4. 实例

4.1 不可交互的后台Service

普通的Service,通过startService()方式开启。Service的生命周期很简单,分别为onCreate、onStartCommand、onDestroy这三个。

1.创建服务类:

public class BackService extends Service {
   
	private Thread mThread;
	public void onCreate() {
   
		super.onCreate();
	}
	
	@Nullable
	@Override
	public IBinder onBind(Intent intent) {
   
		System.out.println("onBind");
		return null;
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
   
		//执行耗时操作
			mThread = new Thread() {
   
				@Override
				public void run() {
   
				try {
   		
					while (true) {
   
						//等待停止线程
						if (this.isInterrupted(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值