码迷,mamicode.com
首页 > 其他好文 > 详细

通过Ibinder类Bind service

时间:2014-06-07 06:29:37      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

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;
  }
 };
}

  

通过Ibinder类Bind service,布布扣,bubuko.com

通过Ibinder类Bind service

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/songwanzi/p/3770652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!