读书人

Service与Activity其间的通信(同一进

发布时间: 2012-07-18 12:05:41 作者: rapoo

Service与Activity之间的通信(同一进程)

一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现。

???? 当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用。比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。

代码如下:


/*************************Service代码****************************************

/public class LocalService extends Service {

????? private final IBinder binder = new LocalBinder();??

??? public class LocalBinder extends Binder {????

????? LocalService getService() {??????????

??? return LocalService.this;???????

?? }????

}??????? public IBinder onBind(Intent intent) {??????

??? return binder;?????

}?

}?

/*****************************Activity代码*************************************/public class BindingActivity extends Activity {??

??? LocalService localService;??

??? private ServiceConnection mConnection = new ServiceConnection() {??

??????? public void onServiceConnected(ComponentName className,IBinder localBinder) {????????????? localService = (LocalBinder) localBinder.getService();???

?????? }????????

? public void onServiceDisconnected(ComponentName arg0) {?????

???????? localService = null;????????

? }?????

};????

protected void onStart() {??

??????? super.onStart();????

????? Intent intent = new Intent(this, LocalService.class);???????

?? bindService(intent, mConnection, Context.BIND_AUTO_CREATE);???

?? }??????

? protected void onStop() {??

??????? super.onStop();?????

???? unbindService(mConnection);??

??? }????

? public void printRandomNumber{??????

????? int num = localService.getRandomNumber();???

????? System.out.println(num);?

?? }

}?

代码解释:

使用使用context.bindService()启动Service会经历:
context.bindService()->onCreate()->onBind()->Service running
onUnbind() -> onDestroy() ->Service stop

Activity能进行绑定得益于Service的接口onBind()。Service和Activity的连接可以用ServiceConnection来实现,需要实现一个新的ServiceConnection,重写onServiceConnected和onServiceDisconnected方法。执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(显式或隐式)和一个你实现了的ServiceConnection实例。一旦连接建立,你就能通Service的接口onBind()得到serviceBinder实例进而得到Service的实例引用。一旦Service对象找到,就能得到它的公共方法和属性。但这种方式,一定要在同一个进程和同一个Application里。

?

读书人网 >移动开发

热点推荐