通过Ibinder类Bind service

Binder is like RPC in java. It enables multi-processes communication. Now we
will talking about how to bind service using IBinder class.

总共有3种bind service方法:

1.使用IBinder
class

2.使用Messanger
class

3.使用AIDL

这里只讨论IBinder class方法。

用IBinder class 来bind service分以下几步:

Service创建步骤:

1.创建一个新的工程名字为“BindServiceUsingBinderClass”;

2.在创建的Application中创建一个Service.java继承Service;

3.在Service.java中创建一个LocalBinder内部类继承Binder;

4.实现service中onBind()方法并返回“LocalBinder的实例。

Activity创建步骤:

1.创建Client
Activity
,并创建一个”ServiceConnection"接口的instance。

2.实现该接口的两个方法-onServiceConnected()和onServiceDisconnected().

3.在onServiceConnected()方法中,把iBinder instance cast成localBinder类。

4.实现onStart() 方法并用bindService()绑定服务。

5.实现onStop() 方法,并用unbindService()解除绑定。

Service.java代码如下:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//Service.java

public class Service extends
Service{

 IBinder mBinder = new
LocalBinder();

 @Override

 public
IBinder onBind(Intent intent) {

  return
mBinder;

 }

 public
class LocalBinder extends
Binder {

  public
Server getServerInstance() {

   return
Server.this;

  }

 }

 public
String getTime() {

  SimpleDateFormat mDateFormat = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  return
mDateFormat.format(new
Date());

 }

}

  Client.java

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

//Client.java

public class Client extends
Activity {

 boolean
mBounded;

 Server mServer;

 TextView text;

 Button button;

 

 @Override

    public
void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        text = (TextView)findViewById(R.id.text);

        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new
OnClickListener() {

   

   public
void onClick(View v) {

    text.setText(mServer.getTime());

   }

  });

    }

 @Override

 protected
void onStart() {

  super.onStart();

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

        bindService(mIntent, mConnection, BIND_AUTO_CREATE);

 };

 

 ServiceConnection mConnection = new
ServiceConnection() {

  

  public
void onServiceDisconnected(ComponentName name) {

   Toast.makeText(Client.this, "Service is disconnected", 1000).show();

   mBounded = false;

   mServer = null;

  }

  

  public
void onServiceConnected(ComponentName name, IBinder service) {

   Toast.makeText(Client.this, "Service is connected", 1000).show();

   mBounded = true;

   LocalBinder mLocalBinder = (LocalBinder)service;

   mServer = mLocalBinder.getServerInstance();

  }

 };

 

 @Override

 protected
void onStop() {

  super.onStop();

  if(mBounded) {

   unbindService(mConnection);

   mBounded = false;

  }

 };

}

  

时间: 2024-10-19 15:36:41

通过Ibinder类Bind service的相关文章

Spring MVC中一般类使用service

在Spring MVC中,Controller中使用service只需使用注解@Resource就行,但是一般类(即不使用@Controller注解的类)要用到service时,可用如下方法: 1.SpringContextUtil package com.test.framework.utils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBea

Bind Service原理及例子

startService有个致命的弱点,startService无法将service运算的结果返回给activity,bindService正是解决这一问题作为一个bindService他是充当服务器端的,其他的组件是充当客户端的,在activity中可以得到service运行的一些基本的情况 public class MainActivity extends Activity { private Button button1; private Button button2; private B

IBinder类的中文翻译

远程对象的基础接口,是一个为了在执行进程中和进程间调用时的高性能,而设计的轻量级远程调用机制的核心部分.这个接口描述了和远程对象交互的抽象协议.不要直接实现这个接口,而是通过继承Binder来实现. IBinder的关键API是与 Binder.onTransact()相匹配的transact().这个方法分别允许你给IBinder对象发出一个请求,并接收一个进入一个Binder对象的请求.这个事务API是同步的,这样一个对transact()的调用会在目标从Binder.onTransact(

PHP Closure类Bind与BindTo方法

Closure类为闭包类,PHP中闭包都是Closure的实例: 1 $func = function(){}; 2 var_dump($func instanceof Closure); 输出 bool(true) Closure有两个函数将闭包函数绑定到对象上去, 静态方法Bind public static Closure Closure::bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )

Dao接口和实现类以及Service接口和实现类代码抽取

紧接着上次无线点餐项目的文档,我们进行Dao层抽取. 6.Dao接口以及实现类代码抽取 对于BoardDao和CuisineDao的处理接口和实现类,除了定义自己的特有方法外,其他基本功能的CRUD方法都一样,只是操作的实体对象不一样.为了代码的复用,简化代码,我们可以将公共的CRUD方法提取到BaseDao中,只需要实现接口即可. 同理, 不同的实现类,实现CRUD相同的业务逻辑的时, 除了操作的实体不同,其他都是相同的, 所以我们可以把相同的业务逻辑实现,抽取出来,放到BaseSericeI

4-3 买家类目-service

DAO:ProductCategory.Service可以简化一些,叫CategoryService. package com.imooc.sell.service; import com.imooc.sell.dataobject.ProductCategory; import java.util.List; /** * 类目 * Created by zhongzh * 2018-05-26 23:53 */ public interface CategoryService { Produc

Spring 3.0 中一般 普通类调用service

在Spring MVC中,Controller中使用service只需使用注解@Resource就行,但是一般类(即不使用@Controller注解的类)要用到service时,可用如下方法: 1.SpringContextUtil package com.test.framework.utils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBea

MVC下的DAO接口类和SERVICE接口类区别?

简单理解: DAO数据库访问对象 实现连接数据库 修改.添加等细节 service服务层 面向功能 把一个整个服务 细化 调用DAO其实service其中都是一些方法 去调用DAO 甚至方法名都和DAO中一样的如某个service是用作用户注册的其中可能包括检测用户名是否存在和插入用户数据两部分分别调用DAO中具体实现 操纵数据库看起来逻辑更清晰而已 进一步说明: Dao层实现是简单的CRUD操作.相当于sql中的单条select,insert,upate,delete语句.而service层就

Android学习笔记(五二):服务Service(中)- 继承Service类

通过IntentService的继承类实现命令触发的服务,也可以直接通过Service的继承类来实现.在IntentService中的例子,我们增加了StopService( )的方式,用于试验.在实际应用中,IntentService常用于一次性运行,自动结束的情况,不需要人工停止干预.对于需要人工干预的停止的,长时间(或无限制)运行的情况,可直接继承Service的方式,例如音乐播放.IntentService也是Service的一个继承类. 继承Service类 在本例中,我们中我们模拟音