Activity通过bindService启动Service后Activity和Service之间的通信!
来源:互联网 发布:淘宝不能重新激活店铺 编辑:程序博客网 时间:2024/04/27 16:48
最近在看同一个程序中Service的两种驱动方式时,起以Bind启动然后可以进行Service和Activity之间的相互通信。一直没看明白,在翻看SDK时发现一个例子,特别摘抄如下:
这个时BindingService继承自Activity,然后通过点击按钮来启动Service
public class BindingService extends Activity { private static final String TAG = "BindingService"; // mService负责接收Service传过来的对象LocalService mService;boolean mBound = false;Button bindBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bindBtn = (Button) findViewById(R.id.bindBtn); bindBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLog.i(TAG, "OnClick....");if(mBound) {int num = mService.getRandomNumber();Toast.makeText(BindingService.this, num+"", Toast.LENGTH_LONG).show();}} }); }@Overrideprotected void onStart() {super.onStart();// Bind to LocalServiceIntent intent = new Intent(this, LocalService.class);Log.i(TAG, "onStart.....onBind");bindService(intent, mConnection, Service.BIND_AUTO_CREATE);}@Overrideprotected void onStop() {super.onStop();// UnBind from the serviceif(mBound) {unbindService(mConnection);mBound = false;}}// Defines callbacks for service binding, passed to bindService()private ServiceConnection mConnection = new ServiceConnection() {@Override // 在Service断开的时候调用这个函数public void onServiceDisconnected(ComponentName name) {// 另外说明在这里打log或者是使用Toast都不能显示,不知道是怎么回事mBound = false;}@Override// 在Service连接以后调用这个函数public void onServiceConnected(ComponentName name, IBinder service) {// we have bound to LocalService, cast the IBinder and get LocalService instance// 获得Service中的Binder对象// 另外说明在这里打log或者是使用Toast都不能显示,不知道是怎么回事LocalBinder binder = (LocalBinder) service;// 通过Binder对象获得Service对象,然后初始化mServicemService = binder.getService();Log.i(TAG, "onServiceConnected.....");System.out.println("onServiceConnected.....");mBound = true;}};}public class LocalService extends Service {// Binder given to clients// 返回一个Binder对象private final IBinder mBinder = new LocalBinder();// Random number generatorprivate final Random mGenerator = new Random();/*** * Class used for the client Binder.Because we know this service always * runs in the same process as its clients */public class LocalBinder extends Binder {LocalService getService() {// return this instance of LocalService so clients can call public methodreturn LocalService.this;}}@Override// 如果是通过startService()函数启动的时候,这个函数是不起作用的。// public void onServiceConnected(ComponentName name, IBinder service) 返回的Activity// IBinder service 对象public IBinder onBind(Intent intent) {// IBinder通信关键是利用Activity中的IBider对象获得service对象,然后调用service中的函数// 传给Activity一个Binder对象,通过这个Binder对象调用getService()获得Service对象return mBinder;}// method for clientspublic int getRandomNumber() {return mGenerator.nextInt(100);}}
- Activity通过bindService启动Service后Activity和Service之间的通信!
- Activity通过bindService启动Service后Activity和Service之间的通信!
- Activity通过bindService启动Service后Activity和Service之间的通信!
- Activity中通过bindService启动Service
- 【随心笔录】Service和Activity通信,bindService启动服务
- Android Activity和Service之间的通信
- Android Activity和Service之间的通信
- Activity和Service之间的通信
- Android Activity和Service之间的通信
- Service和Activity之间的通信
- Android Activity和Service之间的通信
- service和activity之间的通信
- Service和Activity之间的通信
- service和Activity之间的通信
- service与activity通信 之 bindService
- 通过bindService方法实现Activity与Service的交互
- activity和service之间如何进行通信?
- activity和service之间如何进行通信?
- uva 573 The Snail
- Linux驱动之设备模型(8)
- Screen — A must for SSH
- 数据结构之冒泡排序
- C#datagridview自动编号
- Activity通过bindService启动Service后Activity和Service之间的通信!
- string和exception在vc6.0中的使用
- 使用Contact数据模型来批量插入联系人(下)
- 农妇
- XML文档操作及数据库导出XML文档
- epoll_create, epoll_ctl和epoll_wait & select
- 资治通鉴,卷一百一十五,刘裕事业的第三步,消灭海贼王
- SharedPrepferences存取其他程序的总结
- 什么是FLV视频格式?FLV视频格式是什么意思?