第7章后台服务 杨刚 中国人民大学
第7章 后台服务 杨刚 中国人民大学
7.1 Service简介 Service 口Android?系统的服务组件,适用于开发没有用户界面且 长时间在后台运行的应用功能 a b 因为手机硬件性能和屏幕尺寸的限制,通常Android系 统仅允许一个应用程序处于激活状态并显示在手机屏幕 上,而暂停其他处于未激活状态的程序
7.1 Service简介 n Service q Android系统的服务组件,适用于开发没有用户界面且 长时间在后台运行的应用功能 q 因为手机硬件性能和屏幕尺寸的限制,通常Android系 统仅允许一个应用程序处于激活状态并显示在手机屏幕 上,而暂停其他处于未激活状态的程序
7.1 Service简介 Service Android系统需要一种后台服务机制 ■没有用户界面 ■其它应用组件能够启动后台服务 ■当用户切换到另外的应用场景,service能够继续在后台运行 ■一个组件能够绑定到一个service并且与之交互,例如,一个 service可能会处理网络操作,播放音乐,操作文件/O或者与内 容提供者(content provider)交互,但是所有这些活动都是在 后台进行
7.1 Service简介 n Service q Android系统需要一种后台服务机制 n 没有用户界面 n 其它应用组件能够启动后台服务 n 当用户切换到另外的应用场景,service能够继续在后台运行 n 一个组件能够绑定到一个service并且与之交互,例如,一个 service可能会处理网络操作,播放音乐,操作文件I/O或者与内 容提供者(content provider)交互,但是所有这些活动都是在 后台进行
7.1 Service简介 ■Service的优势 口没有用户界面,更加有利于降低系统资源的消耗 Service比Activity具有更高的优先级,因此在系统资源 紧张时,Service不会被Android系统优先终止 口即使Service被系统终止,在系统资源恢复后Service也将 自动恢复运行状态,可以认为Service是在系统中永久运 行的组件 Service除了可以实现后台服务功能,还可以用于进程间 通信(Inter Process Communication,IPC),解决不同 Android应用程序进程之间的调用和通讯问题
7.1 Service简介 n Service的优势 q 没有用户界面,更加有利于降低系统资源的消耗 q Service比Activity具有更高的优先级,因此在系统资源 紧张时,Service不会被Android系统优先终止 q 即使Service被系统终止,在系统资源恢复后Service也将 自动恢复运行状态,可以认为Service是在系统中永久运 行的组件 q Service除了可以实现后台服务功能,还可以用于进程间 通信(Inter Process Communication,IPC),解决不同 Android应用程序进程之间的调用和通讯问题
7.1 Service简介 Servicel的分类 o本地服务(Local Service):用于应用程序内部; 远程服务(Remote Service):用于android系统内部 的应用程序之间。可以定义接口并把接口暴露出来,以 便其他应用进行操作。客户端建立到服务对象的连接, 并通过那个连接来调用服务
7.1 Service简介 n Service的分类 q 本地服务(Local Service ):用于应用程序内部; q 远程服务(Remote Service):用于android系统内部 的应用程序之间。可以定义接口并把接口暴露出来,以 便其他应用进行操作。客户端建立到服务对象的连接, 并通过那个连接来调用服务
7.1 Service简介 ·Service生命周期 ▣onCreate()函数 ■Servicel的生命周期开始,完成Service的初始化工作 口onStart()函数 ·后动线程 onDestroy()函数 ■Servicel的生命周期结束,释放Service所有占用的资源 调用 st art Ser vi ce() on eat e() Ser vi ce Ser vi ce onSt art() 正在运行 被停止 onDest roy() 关闭Ser vi ce 后动Ser vi ce
7.1 Service简介 n Service生命周期 q onCreate()函数 n Service的生命周期开始,完成Service的初始化工作 q onStart() 函数 n 启动线程 q onDestroy() 函数 n Service的生命周期结束,释放Service所有占用的资源 调用 st ar t Ser vi ce( ) 启动 Ser vi ce onCr eat e( ) onSt ar t ( ) Ser vi ce 正在运行 Ser vi ce 被停止 onDest r oy( ) 关闭 Ser vi ce
7.1 Service简介 Service生命周期 口Service生命周期包括 ·完整生命周期从onCreate()开始到onDestroy()结束,在 onCreate()中完成Servicel的初始化工作,在onDestroy()中释 放所有占用的资源 ■活动生命周期从onStart()开始,但没有与之对应的停止” 函数,因此可以粗略的认为活动生命周期是以onDestroy() 标志结束 Service的使用方式一般有两种 口后动方式 口绑定方式
7.1 Service简介 n Service生命周期 q Service生命周期包括 n 完整生命周期从onCreate()开始到onDestroy()结束,在 onCreate()中完成Service的初始化工作,在onDestroy()中释 放所有占用的资源 n 活动生命周期从onStart()开始,但没有与之对应的“停止” 函数,因此可以粗略的认为活动生命周期是以onDestroy() 标志结束 n Service的使用方式一般有两种 q 启动方式 q 绑定方式
Component calls 7.1 Service简介 startService() ·后动方式 onCreate() 口通过调用Context..startService(0后动 Service,通过调用Context..stopService() 或Service.stopSelf)停止Service。因此 onStartCommand( Service一定是由其它的组件启动的 ,但停止过程可以通过其它组件或自 身完成 Service is running Active 口在后动方式中,启动Service的组件不 Lifetime 能够获取到Servicel的对象实例,因此 无法调用Service中的任何函数,也不 The service is stopped by itself or a client 能够获取到Service中的任何状态和数 据信息 口 能够以启动方式使用的Service,需要 具备自管理的能力,而且不需要从通 onDestroy() 过函数调用获取Service的功能和数据 Service is shut down Unbounded
7.1 Service简介 n 启动方式 q 通过调用Context.startService()启动 Service,通过调用Context.stopService() 或Service.stopSelf()停止Service。因此 ,Service一定是由其它的组件启动的 ,但停止过程可以通过其它组件或自 身完成 q 在启动方式中,启动Service的组件不 能够获取到Service的对象实例,因此 无法调用Service中的任何函数,也不 能够获取到Service中的任何状态和数 据信息 q 能够以启动方式使用的Service,需要 具备自管理的能力,而且不需要从通 过函数调用获取Service的功能和数据
Component calls 7.1 Service简介 bindService() 绑定方式 onCreate( Servicel的使用是通过服务链接( Connection)实现的,服务链接能够获取 Servicel的对象实例,因此绑定Servicel的 onBind() 组件可以调用Service中实现的函数,或 直接获取Service中的状态和数据信息 Service is running (clients are o使用Servicel的组件通过 Active bound to it) Context..bindService()建立服务链接,通过 Lifetime All clients unbind by calling Context..unbindService()停止服务链接 unbindService() 0 如果在绑定过程中Service没有后动, Context.bindService()会自动启动Service, onUnbind() 而且同一个Service可以绑定多个服务链 接,这样可以同时为多个不同的组件提 供服务 onDestroy() Service is shut down Bounded
7.1 Service简介 n 绑定方式 q Service的使用是通过服务链接( Connection)实现的,服务链接能够获取 Service的对象实例,因此绑定Service的 组件可以调用Service中实现的函数,或 直接获取Service中的状态和数据信息 q 使用Service的组件通过 Context.bindService()建立服务链接,通过 Context.unbindService()停止服务链接 q 如果在绑定过程中Service没有启动, Context.bindService()会自动启动Service, 而且同一个Service可以绑定多个服务链 接,这样可以同时为多个不同的组件提 供服务
Component calls Component calls startService() bindService() 的 onCreate() onCreate() onStartCommand( onBind() Service is running Service is running (clients are Active bound to it) Lifetime All clients unbind by calling unbindService( The service is stopped by itself or a client onUnbind() onDestroy() onDestroy() Service is Service is shut down shut down Unbounded Bounded