您的位置:首页 > 移动开发 > Android开发

Android四大组件之Service

2015-11-19 22:30 399 查看
    Service,服务,是一种需要长期后台运行的进程,例如,数据的更新,定时的轮询,监视硬件的插入等

  一、简介

    	Service是一种中生命周期比较长的组件,没有界面不与用户交互;长期运行在后台执行与界面无关

操作;与Thread类似,但是使用线程不安全;最重要的一点是Service也是运行在主线程的,不能做耗

    时的操作

  二、详解

      1.首先了解一下Android中的线程知识

	线程由高到低为:前台-可视-服务-后台-空进程

	线程的回收是从低到高的,当内存不足时,会先从空进程开始从低到高回收;服务的级别是比较高的

     一般情况下不会被回收,一旦被回收,那么在内存充足时,系统会自动启动被回收掉的服务

      2.如何使用

	创建类继承Service,并且在清单文件中配置service节点

	开启服务

      3.生命周期

	Started Service标准模式开启

	    其他组件调用startService方法开启,这种Service可以无限制运行下去,除非调用stopSelf方

	  法或者其他组件调用stopService方法,但是只能被停止一次

	BoundService绑定服务

	    调用者用bindService方法绑定服务,调用者通过一个IBinder接口和service通信,调用者也可

	  用unBindService方法解除绑定;一个Service也可和多个用户进行绑定,所有用户解除绑定后才会

	  销毁service

	  bindService(service, serviceConnection, BIND_AUTO_CREATE);

		一旦绑定成功后,服务内部的onBind方法执行,并且只执行一次,再次绑定不执行

		serviceConnection参数:ServiceConnection的对象,要重写onServiceConnected,绑

				      定成功后执行此方法,方法中的IBinder接收onBind返回的数据

		BIND_AUTO_CREATE:如果绑定的服务不存在那么创建出来


	混合模式

	    先用startService方式开启,然后绑定服务,这时,单纯的stopService和stopSelf方法关闭

	  不了服务,除非所有用户都解绑才可以关闭

	    使用混合模式要严格遵守以下步骤

		start()开启服务

		bind()绑定服务

		unbind()解除绑定

		stop方式停止服务

      4.两种开启方式区别

	不同一

	 start()开启后服务与开启者无任何关系,调用者退出后,service也会继续执行

	 bindService()开启后,调用者退出service也会退出(非正常退出),可以在onDestory中解除绑定

	不同二

	 bingService开启服务后可以调用service中的方法,而start不能

      5.绑定服务步骤

	编写服务代码

		public IBinder onBind(Intent intent){}

	服务内部定义代理人对象MyBinder

		代理人对象中有一个方法可以调用服务内部的方法

	onBind方法中返回代理人对象

	在activity中采用绑定服务的方法

bindService(service, serviceConnection, BIND_AUTO_CREATE);

	ServiceConnection中一个实现类获取返回的代理人MyBinder对象

		public void onServiceConnected(ComponentName name,IBinder service){}

	强制类型转换IBinder为MyBinder

		mybinder=(MyBinder)service

	通过mybinder调用服务中的方法

      6.服务分类

	本地服务:服务在当前应用程序内部

	远程服务:服务在其他应用程序

	  绑定远程服务方法

	  a.代码编写与绑定本地服务一样

	  b.远程服务的接口定义文件.java-->.aidl

	  c.接口定义文件中的访问修饰符全删掉public private

	  d.原来代理人MyBinder extends Binder implements Iservice --->extends IService.Stub

	  e.把远程服务的aidl文件拷在本地,目录名要一致

	  f.iservice = IService.Stub.asInterface(service)得到远程服务对象

	  g.调用远程服务中方法

   三、小结

	学的东西很多,短时间内不能很好的理解,动手写博客的时候无从下手,看着笔记一点一点的回忆,

     开始做项目,用的也是一些基本的service知识

	预习--总结--复习--回顾
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: