Service基础

给别人提供功能

服务:运行在Android系统的后台,不需要显示,在后台运行

            作用:后台运行,不会影响用户的操作,服务可以启动长时间执行的操作,主要用于网络传输,播放音乐,文件传输,进程通讯,总是在后台存在(因为没有界面,所以在后台,而不是子线程)

 

应用场景:推送技术

                    安全软件

                    音乐播放器

程序中服务的结构:应用程序启动后,系统创建进程给应用程序。服务和其他应用组件全部保存在进程中。

1、创建服务子类,清单文件中注册

2、使用服务 启动:Context startService(Intent)

                       服务处理实际操作:onCreate(),只要服务没有从进程中消失,那么onCreate一次,无论启动多少次服务。onCreate进行资源初始化,例如创建线程,打开数据库

/** 服务第一次创建之后,被调用,只调用一次*/

@Override

public void onCreate() {

    super.onCreate();

}

                        onStartCommand()每启动一次Service就会调用该方法一次

 

服务可以多次调用startService,当调用该方法,如果服务已经启动,那么直接找到服务的实例,直接调用onStartCommand

onDestroy当服务停止的时候,或者被关闭的时候自动被调用onDestroy

onStartCommand返回值信息:int  这个方法的返回值用来控制服务恢复支持的方式,当进程意外终止之后,系统根据这个方法返回值进行处理,可以将服务重新启动相当于复活

根据“粘性服务”当onStartCommand这个方法返回的启动模式是粘性的,系统就会检测服务,当进程意外终止,自动复活服务

3、当设置了onStartCommand返回值为START_STICK的时候,如果将进程杀掉,那么系统会尝试将进程启动并且恢复服务,重新启动服务,并且调用onStartCommand方法,这个方法的参数参数1 Intent --》null

返回值START_REDELIVER_INTENT,保留最后一个Intent,在启动的时候传给onStartCommand

 

服务的停止:Context.stopService(Intent),自动的回调服务的下面方法。不再管理是否粘性,都会停止,不再运行。

public void onDestroy() {

    Log.d("MusicService","onDestroy");//停止服务时调用该方法,界面还在,

Service与线程:

1、服务创建后存在主线程当中,运行在主线程,所以内部的操作时间要短

IntentService:内置了线程,简化开发

功能与应用场景:适合实际操作是顺序执行的,每一个操作都可以有很长时间,例如一个顺序下载队列,(迅雷),因为是顺序执行的所以当一个阻塞,后续的Intent将不能够及时执行

 

启动的方式:启动可以采用startService,每次执行startService就会把intent存起来,然后按照顺序处理

 

绑定Service

在同一个应用程序中A1绑定Service

 

关于绑定服务与开始服务bindService和startService区别

1、startService的启动通过上下文,启动之后,当前的上下文与服务基本上没什么关系,应用程序组件   可以退出,服务不受影响,这个服务的生命周期和应用程序的进程是一样的。

2、bindService的启动通过bindService来绑定,设置是否自动启动服务BIND_AUTO_CREATE,绑定后,应用程序组件销毁前要确保解除了绑定。

3、startService:生命周期和进程一样,当stopService的时候服务会进入到销毁状态,服务就不存在了。当进程意外终止,并且服务没有stop并且服务启动的模式是粘性的,那么进程重新创建,服务重新启动

4、bindService生命周期:当服务不存在的时候第一个bind创建,服务支持同时绑定多个对象。当所有的绑定的对象全部解除的时候服务将被销毁。这个规则由系统管理。

5、有一种情况,startService可以与bindService进行配合,通常先startService保证服务的生命周期够长,能够执行长时间操作,然后使用Activity进行服务的绑定,绑定之后来管理和操作服务,通常这种应用就在下载管理器中使用

 

// 参数代表了ServiceConnection接口,用来获取Service内部的对象

// 获取的对象就可以掉服务的方法了

bindService(intent,this,BIND_AUTO_CREATE);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值