认识 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相关资源的清理,比如停止其子线程,注销监听器等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值