认识 Android Service
Posted 沐风雨木
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识 Android Service相关的知识,希望对你有一定的参考价值。
1.使用Service
2.绑定Service
3.Service的生命周期
--------------------------------------------
1.使用Service
启动Service:
Content.startService( intent );
停止Service:
Content.stopService( intent );
2.绑定Service
绑定服务
Content.bindService(intent,this,BIND_AUTO_CREATE);
解除绑定服务
Content.unbindService( this );
绑定完之后,会有两个方法需要实现:
服务被绑定之后执行
onServiceConnected(ComponentName name ,IBinder service){ }
服务所在进程崩溃之后,或者被销毁时执行
onServiceDisconnected(ComponentName name){ }
这里需要返回一个实现了IBinder接口的Binder();
例子代码:
创建一个serviceruning,是否运行,默认是false;
在onCreate中为true时才运行,当为false时,停止运行。
}.start;
销毁时,设置serviceruning为false,停止线程运行。
3.Serice生命周期
同时启动服务并且绑定服务,必须解除绑定服务和停止服务,这个服务才会停止掉。
启动服务,退出当前Activity,发现服务没有被销毁,还在运行,返回Activity,点击销毁服务,服务才销毁;
绑定服务,退出当前Activity,发现抛出一个异常,并取消绑定。
注:
1) 可以通过调用Context.startService()启动一个Service,这可能会触发Service的onCreate()和onStart()操作,具体来说即执行startService()一定会触发onStart(),但如果该Service已经在系统中存在,则onCreate()不会被再次调用,它只在Service第一次启动时触发。
通过Context.startService()启动的Service会一直运行,直到通过Context.stopService()或者stopSelf()停止它。多次通过startService()启动某个服务并不会生成多个实例,但会导致服务的onStart()被多次调用,当然由于只有一个实例,因此无论启动多少次,停止它只需调用一次Context.stopService()或stopSelf()就可以了。
2) 也可以通过Context.bindService()来获得一个服务的链接,这个链接是一直会保持到通过Context.unbindService()断掉它。如果在连接时系统中还没有该服务,则可能会新创建一个服务,这时Service的onCreate函数也同样会被调用。连接建立时会Service的onBinder会被触发,通过onBinder可以返回连接建立后的IBinder接口对象,使用服务的客户端(比如某个Activity)可以通过IBinder对象和Service交互。
一个Service如果是通过bindService()启动的,那么它会一直存在到没有任何客户端与它保持连接为止,原因是可能有很多客户端与这个服务保持连接,这时如果某个链接被客户端主动断掉只会是Service的链接数减1,当减至0的时候这个Service就会被销毁。
3) 一个Service既可以被启动(start)也可以被连接(bind),这时Service的生命周期取决于它被创建的方式,如果是通过Context.startService()创建的则和第一种情况一样,如果是通过Context.bindService()使用参数Context.BIND_AUTO_CREATE创建的,则情况和第二种一样。
当然,在Service停止,被销毁时,会触发其onDestroy()函数,我们需要在这里完成这个Service相关资源的清理,比如停止其子线程,注销监听器等等。
以上是关于认识 Android Service的主要内容,如果未能解决你的问题,请参考以下文章