1、把service在mainfest中注册,如:<service android:name="com.example.android.download.DownLoadService"/>
2、一个类继承Service,此类中一个内部类继承Binder,service类实现复写onBind方法,返回值为继承Binder的对象,如下:
public class DownLoadService extends Service { private static final String TAG = "DownLoadService"; private SimpleBinder sBinder = new SimpleBinder(); @Override public IBinder onBind(Intent arg0) { Log.i(TAG, " onBind"); return sBinder; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, " onStartCommand"); return super.onStartCommand(intent, flags, startId); } public class SimpleBinder extends Binder { /** * 测试activity和service是否绑定成功 */ public int add(int a, int b) { return a + b; } } }
private boolean isBindered; // 是否已经和service绑定 private MyServiceConnection myServiceConnection = null; private DownLoadService.SimpleBinder sBinder;
/** * 启动service */ private void startService() { if (isBindered) { Log.i(TAG, " startService, is bindered"); } else { Log.i(TAG, " startService, to bind service"); Intent intent = new Intent(); intent.setClass(DownloadActivity.this, DownLoadService.class); myServiceConnection = new MyServiceConnection(); this.startService(intent); // 用startService方法启动service,不需要时可不调用 bindService(intent, myServiceConnection, BIND_AUTO_CREATE); } }
class MyServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i(TAG, " in MyServiceConnection, onServiceConnected"); sBinder = (DownLoadService.SimpleBinder) service; isBindered = true; int addRerue = sBinder.add(1, 5); Log.i(TAG, " addRerue is: " + addRerue); } @Override public void onServiceDisconnected(ComponentName name) { Log.i(TAG, " in MyServiceConnection, onServiceDisconnected"); } }
备注:解除绑定可以如下:
if (isBindered) { unbindService(myServiceConnection); }
addRerue is: 6
可查看源代码,路径:http://download.csdn.net/detail/w250shini11/8266007