Android四大组件之Service

本文详细介绍了Android中的Service组件,包括其生命周期、启动方式、与客户端通信的方法及IntentService的使用。Service作为四大组件之一,能够在后台运行,为应用程序提供持续的服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     Service,服务,是Android的四大组件之一,可以在Android的后台运行,用户看不到界面。我先讲一下Service的生命周期

     当我们调用startService()方法的时候,相应的服务就会启动起来,如果这个服务之前未启动过,则onCreate()->onStartCommand(),如果这个服务之前启动过,则只会执行onStartCommand(),不会再执行onCreate(),虽然会调用多次onStartCommand()但是每个服务只会存在一个实例。如果我们想停下来这个服务,那么我们需要调用一次stopService()或stopSelf()方法。

      我们也可以调用Context的bindService()来获取一个服务的持久链接,这时就会回调服务中的onBind()方法,返回IBinder的实例,实现与调用方的通信。只要没有调用unbindService()方法,这个服务就会一直保持。

       记住,startService()对应stopService()才能使服务中onDestory()方法执行销毁服务。bindService()对应unbindService()方法,才能使服务中onDestory()方法执行销毁服务。如果你两种方式都调用过,那么必须同时调用stopService()和unbindService()方法,onDestory()方法才会执行。

      很多人会问我用bindService()去调用服务,返回IBinder,这个IBinder如何创建?我们需要在Service类中创建一个内部类如MyBinder。

      

class MyBinder extends Binder{
  public void startload(){
      .....
   }
}
然后在我们的调用方中这样写

private ServiceConnection connection = new ServiceConnection(){
 @Override
  public void onServiceDisconnected(ComponentName name){
  }
   @Override
   public void onServiceConnected(ComponentName name,IBinder service) {
      myBinder = (MyService.MyBinder)service;
      myBinder.startload();//调用service中的方法,实现通信
 }

使用IntentService

如果我们想在服务中做复杂耗时的操作,我们势必想到的是new Thread()开启一个子线程去处理复杂逻辑,然后操作完后调用stopself().这样当然没问题,但是总有写人会忘记开启线程或者调用stopSelf()。所以我们可以使用IntentService.

public class MyIntentService extends IntentService{
    public MyIntentService(){
       super("MyIntentService")//调用父类的有参构造函数
   }
   @Override
   protected void onHandleIntent(Intent intent) {
     //处理复杂的逻辑,这个方法已经运行在子线程中,不需要new thread
   }
 
  @Override
   public void onDestory() {
     super.onDestory();
   }
}

  IntentService的特性:这个服务会在运行结束后,自行调用onDestory()方法去停止该服务,是不是很方便啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值