android 服务解除绑定,绑定/取消绑定服务示例(android)

将以下方法添加到您的活动中:

private MyService myServiceBinder;

public ServiceConnection myConnection = new ServiceConnection() {

public void onServiceConnected(ComponentName className, IBinder binder) {

myServiceBinder = ((MyService.MyBinder) binder).getService();

Log.d("ServiceConnection","connected");

showServiceData();

}

public void onServiceDisconnected(ComponentName className) {

Log.d("ServiceConnection","disconnected");

myService = null;

}

};

public Handler myHandler = new Handler() {

public void handleMessage(Message message) {

Bundle data = message.getData();

}

};

public void doBindService() {

Intent intent = null;

intent = new Intent(this, BTService.class);

// Create a new Messenger for the communication back

// From the Service to the Activity

Messenger messenger = new Messenger(myHandler);

intent.putExtra("MESSENGER", messenger);

bindService(intent, myConnection, Context.BIND_AUTO_CREATE);

}

您可以通过在Activity类上ovverriding onResume()和onPause()绑定到服务。

@Override

protected void onResume() {

Log.d("activity", "onResume");

if (myService == null) {

doBindService();

}

super.onResume();

}

@Override

protected void onPause() {

//FIXME put back

Log.d("activity", "onPause");

if (myService != null) {

unbindService(myConnection);

myService = null;

}

super.onPause();

}

请注意,绑定到服务时,仅onCreate()在服务类中调用该方法。在您的Service类中,您需要定义myBinder方法:

private final IBinder mBinder = new MyBinder();

private Messenger outMessenger;

@Override

public IBinder onBind(Intent arg0) {

Bundle extras = arg0.getExtras();

Log.d("service","onBind");

// Get messager from the Activity

if (extras != null) {

Log.d("service","onBind with extra");

outMessenger = (Messenger) extras.get("MESSENGER");

}

return mBinder;

}

public class MyBinder extends Binder {

MyService getService() {

return MyService.this;

}

}

定义了这些方法之后,您可以在“活动”中找到服务的方法:

private void showServiceData() {

myServiceBinder.myMethod();

}

最后,当某些事件发生时,例如_BOOT_COMPLETED_,您可以启动服务

public class MyReciever  extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (action.equals("android.intent.action.BOOT_COMPLETED")) {

Intent service = new Intent(context, myService.class);

context.startService(service);

}

}

}

需要注意的是启动服务的时候onCreate()和onStartCommand()被调用服务类,当另一个事件发生时由您可以停止你的服务stopService() 请注意,事件侦听器应该是在你的Android清单文件registerd:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,可以通过绑定服务Binding Service)来实现应用程序组件间的通信。绑定服务允许一个组件(例如活动或服务)与另一个服务组件(Service组件)建立连接,并与之进行交互。 要绑定服务,需要遵循以下步骤: 1. 创建服务组件:创建一个服务组件,实现需要提供的功能,并在其onBind()方法中返回一个IBinder对象,该对象用于与绑定组件进行交互。 2. 绑定服务:通过调用Context的bindService()方法来绑定服务。此方法需要传入一个Intent对象和一个ServiceConnection对象。Intent对象指定要绑定服务,ServiceConnection对象用于处理与服务之间的连接和断开连接。 3. 与服务交互:一旦绑定服务成功,就可以使用IBinder对象与服务进行交互。在绑定服务时,ServiceConnection对象的onServiceConnected()方法将被调用,其中的IBinder参数就是服务返回的IBinder对象。 4. 解除绑定:当不再需要与服务交互时,可以通过调用unbindService()方法解除绑定。这将导致ServiceConnection对象的onServiceDisconnected()方法被调用,以通知绑定组件与服务的连接已经断开。 示例代码如下: ```java // 创建服务组件 public class MyService extends Service { // 实现需要提供的功能 @Override public IBinder onBind(Intent intent) { return new MyBinder(); } public class MyBinder extends Binder { // 公开的方法供绑定组件调用 public void doSomething() { // 处理逻辑 } } } // 绑定服务 public class MyActivity extends Activity { private MyService.MyBinder mBinder; private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = (MyService.MyBinder) service; // 与服务交互 mBinder.doSomething(); } @Override public void onServiceDisconnected(ComponentName name) { mBinder = null; } }; @Override protected void onStart() { super.onStart(); // 绑定服务 Intent intent = new Intent(this, MyService.class); bindService(intent, mConnection, BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); // 解除绑定 unbindService(mConnection); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值