• Android 服务_笔记


    Service服务

    服务(Service)是Android中的四大组件之一,适用于开发无界面、长时间运行的应用功能,服务是在后台运行,服务的创建与Activity类似,只需要继承Service和在AndroidManifest.xml文件中注册即可,并且实现Service中的唯一一个方法onBind()。记住必须注册。

    1. 没有用户界面.
    2. 比Activity的优先级高,不会轻易被Android系统终止.
    3. 拥有独立的生命周期.

    一、服务的生命周期

    1、startService方式开启服务的生命周期(启动式的Service(大难临头各自飞))

    服务的运行过程startService()-> onCreate()-> onStartCommond()-> Service running-> context.stopService()-> onDestroy()-> Service stop
    
    • 其他组件调用startService()方法时服务被创建,服务会先执行onCreate()方法,接着执行onStartCommand()方法开启服务,直到自身调用stopSelf()方法或者其他组件调用该方法时服务停止。
    • 通过调用startService()启动Service,通过调用stopService()或Service.stopSefl()停止Service。
    • 服务启动之后,访问者与Service之间没有关联,即使访问者退出了,Service仍然运行。
    • Service是由其他组件启动的,但停止过程可以通过其他组件或自身完成。

    2、bindService方式开启服务周期(绑定式的Service(不求同生,但求共死))

    服务的运行过程bindService()-> onCreate()-> onBind()-> Service running->unBindService()-> onUnbind()-> onDestroy()
    
    • 其他组件调用bindService()方法时服务被创建,通过unbindService()方法停止服务。
    • 通过bindService()方法启用Service,访问者与Service绑定在一起,访问者一旦退出,Service也就终止。
    • 通过服务链接(Connection)获取Service中的状态和数据信息。
    • 如果在绑定过程中Service未启动,Context.bindService会自动启动Service。
    • 可以被多个组件绑定,同时为多个组件服务,注意:数据的同步

    3、Service生命周期方法

    • IBinder onBind(Intent intent):该方法是Service子类必须实现的方法。该方法返回一个IBinder对像,应用程序可以通过该对象与Service组件通信。
    • onCreate():服务第一次被创建后执行的方法。
    • onDestory():服务被销毁时执行的方法
    • onStartCommand():客户端通过startService(Intent service)显式启动服务时执行该方法。
    • onBind():客户端通过bindService(Intent,Service,int)启动服务时执行该方法。
    • onUnbind():客户端调用unBindService(ServiceConnection conn)断开服务绑定时执行的方法。

    二、服务通信

    服务通信有两种:一种是本地服务通信(应用程序内部的通信),一种是远程服务通信(两个应用程序之间的通信)。使用这两个通信必须以绑定方式启动。
    

    1、本地服务通信

    • 使用本地服务通信首先要开发一个Service类,该类会提供一个 IBinder 的 onBind(Intent intent) 方法,onBind()方法会作为参数传递给ServiceConnection类中 onServiceConnected(ComponentNmae name,IBinder service)方法,这样访问者就可以通过IBinder对象与Service进行通信。

    2、远程服务通信

    • Android的各个应用程序进程之间不能直接通信,要完成通信就需要使用远程服务通信。远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言,语法与Java中定义接口很相似,但是存在几点差异如下:

      1. AIDL 定义接口的源代码必须以.aidl结尾。
      2. AIDL 定义中用到的数据类型,除了基本数据类型、String、List、Map、CharSequence之外,其他类型全部都需要导入包,即使它们在同一个包中。
    • 开发人员定义的AIDL接口只是定义了进程之间的通信接口,服务端、客户端都需要使用Android SDK 安装目录下的platform-tools子目录下的aidl.exe工具为该接口提供实现。
    • 注意:AIDL没有修饰符,写法为:interface IService{}。
  • 相关阅读:
    染色法判定二分图
    Kruskal算法求最小生成树
    Prim算法求最小生成树
    Floyd算法求多源最短路
    spfa判断负环
    java 线程的使用
    java IO基础
    数据库 EXISTS与NOT EXISTS
    数据库 何为相关查询和不相关查询?
    数据库的基础知识
  • 原文地址:https://www.cnblogs.com/zhangxiangguo/p/5542546.html
Copyright © 2020-2023  润新知