Android之service篇(一)本地service

         Android中的Service是运行在后台的东西,最好的例子就是当你把播放器退出后,音乐都可以在后台播放。所以是没有界面的。

Service分为两种:

1、本地服务:本地服务用于程序内部,可以用startservice启动服务,用stopservice停止服务,在服务内部可以使用stopSelf或stopSelfResult来停止自己,无论调用了多少次startservice,都只需要调用一次stopService来停止service

2、远程服务:远程服务用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。远程服务需要用bindService方法建立连接,并启动,调用unbindService关闭连接。多个客户端可以绑定至同一个服务。

提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。

 

那么先来看Service的生命周期吧:如图:

         我们可以定义一个本地服务继承Service,然后在这个服务里播放媒体播放器或者记录地理位置变化。通常有时候我们的Service要与Activity交互,那么可以可以定义一个内部类,返回这个Service,当然我们要考虑到如果是以绑定方式启动服务,那么内部类可以定义为继承Binder,然后返回本地服务,主要代码如下:

public class MyService extends Service {
   private IBinder binder=new MyService.LocalBinder();
   
   @Override
   public IBinder onBind(Intent intent) {
        
       return binder;
   }
   MediaPlayer mediaPlayer=null;
   @Override
   public void onCreate() {
       //这里可以启动媒体播放器
       // if(mediaPlayer==null)
       // mediaPlayer=MediaPlayer.create(this, uri);
          super.onCreate();
    }
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
       System.out.println("onStartCommand");
       returnsuper.onStartCommand(intent, flags, startId);
    }
   
    @Override
    public void onDestroy() {
       super.onDestroy();
       System.out.println("onDestory");
    }
   
   //定义内容类继承Binder
   public class LocalBinder extends Binder {
       MyServicegetService(){
           returnMyService.this;
       }
   }
}


在类LocalBinder中的getService方法中是可以返回这个服务的,然后就可以在Activity中调用服务中的公用方法了。

 

Service有两种启动方式:

1、startservice

//启动服务

Intent intent = new Intent();
intent.setClass(MainActivity.this,MyService.class);
startService(intent);

2、bindservice

Intent intent = newIntent(this,MyService.class);
MyService myService =null;
bindService(intent, new ServiceConnection(){
                           
    @Override
    publicvoid onServiceDisconnected(ComponentName name) {
    //而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源
    System.out.println("onServiceDisconnected");
    myService= null;
    }
                           
    @Override
    publicvoid onServiceConnected(ComponentName name, IBinder service) {
    //调用bindService方法启动服务时,如果服务器需要与Activity交互
    //则可以通过onBind方法返回IBinder并返回当前本地服务
    System.out.println("onServiceConnected");
    myService= ((MyService.LocalBinder)service).getService();
    myService.test_fun();
    }
},Context.BIND_AUTO_CREATE);

在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象,具体看代码;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值