认识 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)
@OverRide public IBinder onBind(Intent intent) return new Binder( ); 这里需要返回一个实现了IBinder接口的Binder(); private boolean serviceRunning = false; 例子代码: 创建一个serviceruning,是否运行,默认是false;
在onCreate中为true时才运行,当为false时,停止运行。 serviceRunning = true;
new Thread() @Override public void run() super.run(); while( serviceRunning ) System.out.println("服务正在运行。。。"); try sleep(1000); catch (InterruptedException e ) e.printStackTrace(); }.start; 销毁时,设置serviceruning为false,停止线程运行。 @Override public void onDestroy() super.onDestroy() ; System.out.println("Service destory"); serviceRunning = false;
3.Serice生命周期


同时启动服务并且绑定服务,必须解除绑定服务和停止服务,这个服务才会停止掉。 启动服务,退出当前Activity,发现服务没有被销毁,还在运行,返回Activity,点击销毁服务,服务才销毁; 绑定服务,退出当前Activity,发现抛出一个异常,并取消绑定。 注:

1)  可以通过调用Context.startService()启动一个Service,这可能会触发ServiceonCreate()onStart()操作,具体来说即执行startService()一定会触发onStart(),但如果该Service已经在系统中存在,则onCreate()不会被再次调用,它只在Service第一次启动时触发。

通过Context.startService()启动的Service会一直运行,直到通过Context.stopService()或者stopSelf()停止它。多次通过startService()启动某个服务并不会生成多个实例,但会导致服务的onStart()被多次调用,当然由于只有一个实例,因此无论启动多少次,停止它只需调用一次Context.stopService()stopSelf()就可以了。

2)  也可以通过Context.bindService()来获得一个服务的链接,这个链接是一直会保持到通过Context.unbindService()断掉它。如果在连接时系统中还没有该服务,则可能会新创建一个服务,这时ServiceonCreate函数也同样会被调用。连接建立时会ServiceonBinder会被触发,通过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的主要内容,如果未能解决你的问题,请参考以下文章

Android之Service设置android:process作用

Android四大组件之Service

Android四大组件之Service的介绍

Android LiveData粘性,粘连,倒灌

记一次课程设计(顺便复习一下android service和七牛云 android sdk)

Android Service演义