Android Bound Services 简单使用

原创 2017年01月03日 00:20:23
Bound Service 跟一般的Service的区别是Bound Service可以提供一些方法给开启它的人(组件),相当于把自己的把柄给Activity,这样Activity就可以控制这个Service,不至于不收控制。

1.首先,我们新建一个类,继承Service,重写onBind方法,这时候这个方法就有用了。而且必须用。别忘了注册Service。

2.我们在类里创建一个内部类,继承Binder

public class LocalBinder extends Binder {
        public void show(){
            Toast.makeText(MyBoundService.this, "测试", Toast.LENGTH_SHORT).show();
        }
    } 

这里的方法就是提供给Activity的。

然后实例化。

private LocalBinder binder = new LocalBinder();

把这个实例通过onBind方法返回。

@Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

全部代码

package com.hyw.test;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;

public class MyBoundService extends Service {

    private LocalBinder binder = new LocalBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    public class LocalBinder extends Binder {
        public void show(){
            Toast.makeText(MyBoundService.this, "测试", Toast.LENGTH_SHORT).show();
        }
    } 

然后在Activity里定义服务绑定时的回调方法

private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //解除绑定时执行
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定服务时执行
        }
    };

绑定服务时调用的那个方法里的那个IBinder service参数就是Service的onBind方法返回的那个Ibinder。在这个方法里我们可以获得Service里定义的那个LocalBinder 的实例,也就是onBinder返回的那个binder。获得之后我们就可以使用LocalBinder 这个内部类里定义的方法了。

private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //解除绑定时执行
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定服务时执行
            LocalBinder binder = (LocalBinder) service;
            binder.show();
        }
    };

为了更方便的控制Service,我们一般会在LocalBinder 定义一个获得Service的方法。

public class LocalBinder extends Binder {
        public void show(){
            Toast.makeText(MyBoundService.this, "测试", Toast.LENGTH_SHORT).show();
        }
        MyBoundService getMyBoundService (){
            return MyBoundService.this;
        }
    } 

然后在activity里通过回调方法获得binder,再通过binder获得Service的实例,使用service的方法就更方便了。

private ServiceConnection connection = new ServiceConnection() {


        @Override
        public void onServiceDisconnected(ComponentName name) {
            //解除绑定时执行
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定服务时执行
            LocalBinder binder = (LocalBinder) service;
            mService = binder.getMyBoundService();
            binder.show();
        }
    };

说了这么多,我们还没绑定呢

Intent intent = new Intent(this,MyBoundService.class);
            bindService(intent, connection, BIND_AUTO_CREATE);

connection就是那个回调。

那么怎么解除绑定呢?

这样就行

unbindService(connection);

注意onServiceDisconnected回调方法只在当与服务的联接发生意外中断时,比如服务崩溃或者被杀死时,Android系统将会调用该方法。客户端解除绑定时,不会调用该方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android官方文档之Bound Services

绑定式Service在CS结构中扮演着Server的角色。绑定式Service允许其他组件(如Activity)绑定该Service、发送请求、接收响应、甚至IPC通信( interprocess c...
  • vanpersie_9987
  • vanpersie_9987
  • 2016年05月14日 13:47
  • 5598

android - Bound Services 绑定服务

A bound service is the server in a client-server interface. A bound service allows components (such ...
  • sergeycao
  • sergeycao
  • 2013年05月12日 15:59
  • 820

Android 官方文档 - Bound Services

Bound Services bound服务是客户端-服务器模式的服务。bound服务允许组件(比如activity)对其进行绑定、发送请求、接收响应、甚至进行进程间通信(IPC)。 bound服...
  • k316378085
  • k316378085
  • 2016年12月10日 19:51
  • 183

android - 绑定服务(bound services)

Bound Services(绑定服务 )   绑定服务是有一个接口可以在客户端和服务端之间帮助通信服务。绑定服务允许组件(比如activities)绑定它,组件可以发...
  • luhuajcdd
  • luhuajcdd
  • 2013年04月05日 17:08
  • 1301

Android学习笔记:Bound Services

一、概述 Bound Services提供了客户进程与服务进程间通信的方法 二、基础 1、服务端:实现回调方法onBind(),该方法返回IBinder对象到客户端。 2、客户端:...
  • zhangshaoru
  • zhangshaoru
  • 2012年05月21日 16:42
  • 309

Bound Services

一个绑定服务是服务在客户端和服务器之间的接口。一个绑定服务允许组件绑定一个服务,发送一个请求,接收响应,甚至可以执行线程间的通讯。一个绑定服务代表存活着当服务在另一个应用组件不能无限期的运行在后台。 ...
  • e_worm
  • e_worm
  • 2013年09月16日 22:32
  • 477

Bound services

Briefly introduce to bound services.
  • userqiaohaibin
  • userqiaohaibin
  • 2015年04月07日 16:53
  • 208

Android学习笔记18——Bound Services

一个Bound Service在客户端和服务器接口中是一个服务器。Bound Service允许组件绑定到这个Service,发送请求,接受响应,甚至表现出进程间通信。Bound Service仅仅当...
  • luo849278597
  • luo849278597
  • 2014年12月10日 21:55
  • 393

Android Notes 01 - Bound Services

发表在我的网站,欢迎访问:http://kesenhoo.github.io/blog/2013/02/18/android-notes-01-bound-services/...
  • kesenhoo
  • kesenhoo
  • 2013年04月21日 16:31
  • 7030

Android官方文档-Bound Services(绑定服务)

绑定服务 绑定服务是在客户端 - 服务器接口中的服务器。绑定服务允许组件(如activity)绑定到该服务,发送请求,接收响应,甚至进行进程间通信(IPC)。绑定服务通常只活动在它服务于其他应用...
  • u013656135
  • u013656135
  • 2015年06月11日 11:03
  • 597
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Bound Services 简单使用
举报原因:
原因补充:

(最多只允许输入30个字)