Android:对service的一点理解1
来源:互联网 发布:sql server数据库知识 编辑:程序博客网 时间:2024/06/06 21:42
对于service,它是系统的四大控件之一,它和Activity一样,我们在创建之后,需要在manifest中进行注册。
对于service,今天学习了它的两种调用方式。
一个是基于startservice的开启服务器,
其中过程有
startservice----oncreat
onstartcommand
onstart
stopservice-----ondestroy
四个步骤,通过这种方式开启的服务,即使是页面关闭,在后台的服务也不会关闭,除非我们在程序中有手动关闭步骤并且手动关闭;同时这种方法开启的服务,在后台服务未关闭时,只进行一次oncreat,即程序再次点击启动服务,直接从onstartcommand开始,而不再进行oncreat。
另外一个步骤这是bind,绑定式开启服务。
它的步骤是
bindService----onbind();(如果方式为自动启动的话,服务器未启动的,自动oncreat)
oncreat
onstartcommand
onstart
unonbind
ondestroy
其中onstartcommand和onstart在单应用程序运行中没有观测到出现,据说是出现在多应用程序混合使用时。
另外通过该方法开启服务,该服务就和该程序的Activity不同生但共死,两者之间关系紧密,即当该页面关闭后,绑定就会解除,同时该服务进入销毁阶段。
通过这种方法,我们可以达到之前那种方法所不能实现的功能,即可以调用我们服务中的函数了,可以对服务中的内容进行访问。
这种绑定方法开启的服务,相比之下,安全系数也更高。
对于基于bind方法得到的服务,调用该服务中的方法,我们需要分别在Activity和service的类中生成两个内部类,使得他们建立连接。
这个连接的中间人就是一个ibinder对象,要得到这个对象,我们需要一个BindService 对象,该对象运用于serviceconnect中,它所获取的ibinder是在service类中的内部类binder(继承ibinder的已经实现的类)上,通过该类内部我们自己生成的方法对service内部的函数进行调用,通过多重传递后使得该函数得以在Activity中进行使用。
Ps.如果我们基于安全考虑,对在Service中的ibinder内部类进行private的访问控制,我们可以通过一个自建的implement,里面写入未实现的方法(即我们要调用的方法),之后在我们serviceconnect中传递时用该接口为强制转换对象后进行调用,即可规避该private访问控制。这样做,我们同时可以在ibinder的类中写入其他的方法,而该方法并不继承与该自写接口,这样,我们外部的Activity中就不能对它进行调用。这就是之前说它的安全系数高的原因。
0 0
- Android:对service的一点理解1
- Android:对Service的一点理解2
- Service的一点理解
- 对Android canvas的一点粗浅理解
- 对Android Service的一些理解
- 浅谈对Android Service 的理解
- 对Android Service的一些理解
- 对ActiveX的一点理解
- 对inherited的一点理解
- 对管理信息系统的一点理解
- 对主力的一点理解
- 对HANDLE_MSG()的一点理解
- 对__threadfence的一点理解
- 对makefile的一点理解
- 对ibatis的一点理解
- 对中断的一点理解
- 对Zigbee的一点理解
- 对AndroidRuntime的一点理解
- 子主窗口间消息发送
- 远离共享安全问题 FTP共享文件自己做
- VC 按钮添加提示
- android fragmnet
- GDB使用入门
- Android:对service的一点理解1
- 蓝桥杯历届真题 九宫重排 康拓展开式
- 今天学函数的一些小程序
- mac graphviz fontname lable miss
- 迭代器模式
- Double Checked Locking 模式 -- 单例实现的多线程版本
- 查看MicroSoft Help
- 半自动化安装Ganglia
- 从Delphi REST服务器返回图像并显示在浏览器中