关于Activity绑定到Service上的作用和方法过程


当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用。

Activity能进行绑定得益于Service的接口。为了支持Service的绑定,实现onBind方法如下所示:

private final IBinder binder = new MyBinder();

@Override
public IBinder onBind(Intent intent) {
    return binder;
}
public class MyBinder extends Binder {

    MyService getService(){
      return MyService.this;
    }
}        

 

Service和Activity的连接可以用ServiceConnection来实现。你需要实现一个新的ServiceConnection,重写onServiceConnected和onServiceDisconnected方法一旦连接建立,你就能得到Service实例的引用

// Reference to the service
private MyService serviceBinder;

// Handles the connection between the service and activity
private ServiceConnection mConnection = new ServiceConnection(){
  
  public void onServiceConnected(ComponentName className, IBinder service) {     // Called when the connection is made.     serviceBinder = ((MyService.MyBinder)service).getService();   }
  
public void onServiceDisconnected(ComponentName className) {     // Received when the service unexpectedly disconnects.     serviceBinder = null;   }
};

 

执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(显式或隐式)和一个你实现了的ServiceConnection实例,如下的框架代码所示:

@Override
public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  
// Bind to the service   Intent bindIntent = new Intent(MyActivity.this, MyService.class);   bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); }

 

一旦Service对象找到,通过onServiceConnected处理函数中获得serviceBinder对象就能得到它的公共方法和属性

Android应用程序一般不共享内存,但在有些时候,你的应用程序可能想要与其它的应用程序中运行的Service交互。

 

你可以使用广播Intent或者通过用于启动Service的Intent中的Bundle来达到与运行在其它进程中的Service交互的目的。如果你需要更加紧密的连接的话,你可以使用AIDL让Service跨越程序边界来实现绑定。AIDL定义了系统级别的Service的接口,来允许Android跨越进程边界传递对象。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM