Service基础

    xiaoxiao2021-09-02  113

    给别人提供功能

    服务:运行在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);

    转载请注明原文地址: https://ju.6miu.com/read-677403.html

    最新回复(0)