Android入门:绑定本地服务
来源:互联网 发布:姗姗手帐小铺 淘宝 编辑:程序博客网 时间:2024/06/10 01:10
一、绑定服务介绍
前面文章中讲过一般的通过startService开启的服务,当访问者关闭时,服务仍然存在;
但是如果存在这样一种情况:访问者需要与服务进行通信,则我们需要将访问者与服务进行绑定;
如果使用Context.bindService()方法启动服务,则在服务未创建时,系统会调用服务的onCreate()方法,接着调用onBind()方法,这时就访问者与服务已经绑定;
如果多次调用bindService()多次绑定服务,则不会有副作用(导致多次绑定);
绑定服务的运行流程如下图所示:
二、Bind Service 核心代码
绑定与解绑定服务
(1)Context.bindService(Intent service,ServiceConnection conn,BIND_AUTO_CREATE);//绑定服务
(2)Context.unbindService(ServiceConnection conn);//解除绑定服务
ServiceConnection
ServiceConnection为一个接口,用于绑定和解绑定IBinder,因此需要创建一个类实现它;
class XxxServiceConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {//service为在onBind返回的IBinder
//绑定Binder对象
}
@Override
public void onServiceDisconnected(ComponentName name) {
//解绑定Binder对象
}
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {//service为在onBind返回的IBinder
//绑定Binder对象
}
@Override
public void onServiceDisconnected(ComponentName name) {
//解绑定Binder对象
}
}
Service类
class XxxService extends Service{
private IBinder binder = newXxxBinder();
public IBinder onBind(Intent intent){
return binder;
}
public int fun(int a){//服务提供的方法,但是不能直接调用
...
}
private class XxxBinder extends Binder implements IXxxBinder{//面向接口编程
public return fun1(int a){//对外暴露的API
return fun(a);//内部调用Service的方法
}
}
}
三、BindService案例
场景:服务提供了加法运算的接口,Activity需要调用服务提供的加法运算方法,并返回结果;
效果说明:
MainActivity.java
- package com.xiazdong.bindservice;
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private EditText op1,op2;
- private Button button;
- private TextView result;
- private IAddOp binder ;//使用接口IAddOp
- private ServiceConnection conn = new AddOpServiceConnection();
- private OnClickListener listener = new OnClickListener(){
- @Override
- public void onClick(View v) {
- int number = binder.addOpService(Integer.parseInt(op1.getText().toString()), Integer.parseInt(op1.getText().toString()));
- result.setText("result="+number+"");
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- op1 = (EditText)this.findViewById(R.id.op1);
- op2 = (EditText)this.findViewById(R.id.op2);
- result = (TextView)this.findViewById(R.id.result);
- button = (Button)this.findViewById(R.id.button);
- button.setOnClickListener(listener);
- Intent service = new Intent(this,AddOpService.class);
- this.bindService(service, conn, BIND_AUTO_CREATE);
- }
- private class AddOpServiceConnection implements ServiceConnection{
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {//绑定服务时调用
- binder = (IAddOp)service;
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {//解绑定服务时调用
- binder = null;
- }
- }
- }
AddOpService.java
- package com.xiazdong.bindservice;
- import android.app.Service;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.IBinder;
- public class AddOpService extends Service {
- private IBinder binder = new AddOpBinder();
- public int add(int a,int b){ //服务提供的方法
- return a+b;
- }
- @Override
- public IBinder onBind(Intent intent) {
- return binder;
- }
- private class AddOpBinder extends Binder implements IAddOp{
- public int addOpService(int a, int b) { //binder对外暴露一个API调用服务提供的方法
- return add(a,b);
- }
- }
- }
IAddOpService.java
- package com.xiazdong.bindservice;
- public interface IAddOp {
- public int addOpService(int a,int b);
- }
0 0
- Android入门:绑定本地服务
- Android入门:绑定本地服务
- Android Service之绑定本地服务
- Service绑定本地服务
- 本地绑定服务
- Android Mediaplayer本地音乐播放器(绑定服务)
- 绑定服务调用本地服务中的方法
- Androd绑定本地服务和绑定远程服务
- Android 绑定类型服务---绑定服务
- Android 绑定类型服务---绑定服务
- Android 绑定类型服务---绑定服务
- 【Android学习】Android服务之Service(2)--绑定本地Service
- Android远程服务绑定
- android 绑定服务
- android 绑定远程服务
- Android -- 绑定服务
- 7.1Android服务绑定
- Android 之绑定服务
- 数据库第二章作业
- poj3176(DP)
- Android入门:通过AIDL进行进程间通信
- eventfd以及epoll原理分析
- spring redis入门
- Android入门:绑定本地服务
- Android开发_DrawerLayout实现抽屉布局
- 虚拟机VmWare 无法连接网络
- (六)K-means Clustering and Principal Component Analysis[K-means聚类&主元分析]
- ifarme使用jquery
- [软件测试]三个相同输入框的内容是否为字母,数字
- 多线程中的wait与notify
- hdu 3593 The most powerful force (树形dp+背包)
- hdu2178猜数字(二分法!!)