android 服务service浅析

服务service是android的四大组件之一,常常用在看不见页面的高级场合,在后台执T行。Service与Activity相比,不同之处在于没有对应的页面,相同之处是都有自己的生命周期。首先我们先介绍下service的生命周期。

onCreate:创建服务的时候会触发

onStart:开始服务的时候触发,在Android2.0以下版本使用,现在已经废弃掉。

onStartCommand:开始服务的时候触发,Android2.0以上的版本使用,该函数有一些返回值需要说明一下:

返回值类型返回值说明
START_STICKY粘性的服务,如果服务进程被杀掉,就保留服务的状态为开始状态,I单不保留Intent对象,随后系统尝试重新创建服务,由于服务状态为开始状态,因此创建服务后,一定会调用onStartCommond方法,如果在此期间没有任何启动命令传送给服务,参数Intent就为空值。
START_NO_STICKY非粘性的服务,使用这个返回值时,如果服务被异常杀掉,系统就会自动重启该服务。
START_REDELIVER_INTENT重传Intent的服务,使用这个返回值时,如果服务被异常杀掉,系统就不会自动重启该服务,并传入Intent的原值。
START_STICKY_COMPATIBILITYSTART_ STICKY的兼容版,不保证服务被杀掉后一定能重启。

onDestory:销毁服务时候调用

onBind:绑定服务的时候调用

onRebind:重新绑定,该方法只有当上次onUnbind返回true的时候才能调用。

onUnbind:解除绑定,返回值位为true表示允许再次绑定,再绑定的时候调用onRebind方法。返回值为false时,只能绑定一次,默认返回false。

普通启停:

代码

public class SimpleService extends Service{

private static final String TAG="simpleService";

@override

public int onStartCommand(Intent intent,int flags,int startid){

return START_STICKY;

}

@override

public IBinder onBind(Intent intent){

return null;

}

}

在activity中启停服务很简单,直接调用startService ,调用stopService即可停止服务。当然,也可以在Intent对象中传递参数信息

eg:Intent intent =new Intent (this,SimpleService.class); startservice(intent)

值得注意的是,onCreat方法只会被调用一次,就是在创建的时候,如果连续调用startService方法,会连续执行onStartCommond

立即绑定:

绑定方式的服务定义有所不同,因为绑定的服务可能运行于另一个进程,所以必须定义一个Binder对象用来进行进程间的通讯。

代码

public class BindSimpleService extends Service{

private static final String TAG ="BindSimpleService";

private final IBinder mBinder=new LocalBinder();

public class LocalBinder extends Binder{

public BindSimpleService getService(){

return BindSimpleService.this;

}

}

@override

public IBinde(Intent intent){

return mBinder;

}

@override

public boolean onUnbind(Intent intent ){

return false;

}

}

在Activity 中,绑定或者解绑服务的做法与普通方式不同,首先要第一一个serviceConnection的服务连接对象,然后调用bindService方法或者unbindService方法进行绑定和解绑。

代码

public class BindTestActivity extend AppCompatActivity implements OnClickListence{

private static TextView tv_test;

private Intent mIntent;

@override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

..

..

mIntent= new Intent(this,BindTestActivity.class );

 

}

点击事件

@override

public void onClick (View v){

绑定

boolean bindFlag= bindService(mIntent,mFirstConn,Context.BIND_AUTO_CREATE);

解绑

if(null!=mBindService){

unBindServer(mFirstConn);

mBindService=null;

}

}

private BindSimpleService mBindService;

private ServiceConnection mFirstConn= new ServiceConnection(){

//获取服务对象时的操作

public void onServiceConnected(CompontentName name,IBindr service){

//r

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值