Service的概念与使用

概述:

Service即服务,与Activity,ContentProvider,BroadcastReceiver并称Android程序的四大组件。

在程序后台运行,不可见,难以被Android系统自动杀死。

服务分为本地服务和远程服务,本地服务即为在程序内部使用的服务,而远程服务是在Android系统内的程序与程序之间使用。


用途举例:
后台保持播放音乐、记录地理位置变动、监听部分动作等等。

注意事项:

运行在主线程,所以不能用来做耗时操作,可以在服务中开子线程来做耗时操作。


本地服务的启动与停止:
有两种启动方式,分别是start和bind。
start方式是由startService方法启动,stopService方法,stopSelf方法,stopSelfResult方法停止。
bind方式则是bindService方法,要停止则要先unbindService。


远程服务:
远程服务用于系统内的程序和程序之间,需要定义IBinder接口


生命周期:
根据服务的启动方式,服务的生命周期由两部分组成。
start方式启动的服务的生命周期:onCreate()->onStartCommand()->running->onDestroy()->结束。

bind方式启动的服务的生命周期:onCreate()->onBind()->服务和启动源绑定->onUnbind()->onDestroy()->结束。

running时,可以自行停止或通过启动源停止,当执行了stopService方法,会调用onDestroy()。
当执行了unbindService(),会调用onUnbind()。


特点:
Start方式特点:
服务跟启动源无联系,也无法得到服务对象。
Bind方式特点:
通过Ibinder接口实例,返回ServiceConnection对象给启动源,通过ServiceConnection对象的相关方法能得到Service对象。


Start方式启动(例):

//先要在记录文件中进行记录:
<service android:name="所写的Service类">
 </service>
服务类:
public class Startservice extends Service
{
   @Override
   public IBinder onBind(Intent intent)  //这里要重写onBind方法
  {
    
    return null;
   }
}
Activity中:
Intent intent=new Intent(当前Activity对象,服务类的class);
  startService(intent);
  ...
  stopService(intent);

Bind方式启动(例):

依旧是先在Android程序的记录文件中进行记录。

服务类:

  public class MyBind extends Service
 {
    public class MyBinder extends Binder    //定义MyBinder内部类。
  {
      public MyBind getit()
     {
       return MyBind.this;
     }
   }
     public IBinder onBind(Intent intent)
    {
      return new MyBinder();
    }
    public void unbindService(ServiceConnection conn)
  {
    super.unbindService(conn);
  }
}

Activity中:

     MyBind mb;
     ......
   ServiceConnection con=new ServiceConnection()
   {
    public void onServiceDisconnected(ComponentName name) //Service的启动源与Service的连接丢失时,该方法会被调用。
   {                                                         

    }
     public void onServiceConnected(ComponentName name,IBinder service) //Service的启动源与Service连接成功后,该方法会被调用。
   {                                                                     
                                                                          
      mb=((MyBinder)service).getit();   //然后后面就可以用这个mb来调用这个服务类里定义的部分方法。
    }
   };
   ......
   Intent intent2=new Intent(当前Activity对象,MyBind.class);
   bindService(intent2,con,Service.BIND_AUTO_CREATE);
   ......
   unbindService(con);



注:如果start和bind方式一起使用,要注意先stopService,再unbindService。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值