创建一个扩展Service类的类,并在覆盖的方法中onBind返回本地绑定程序实例:
public class LocalService extends Service { // 给客户的活页夹 private final IBinder mBinder = new LocalBinder(); /** * Class used for the client Binder. Because we know this service always * runs in the same process as its clients, we don't need to deal with IPC. */ public class LocalBinder extends Binder { LocalService getService() { // 返回此LocalService实例,以便客户端可以调用公共方法 return LocalService.this; } } @Override public IBinder onBind(Intent intent) { return mBinder; } }
然后在您的活动中onStart使用ServiceConnection实例绑定到回调中的服务,并在onStop以下实例中取消绑定:
public class BindingActivity extends Activity { LocalService mService; boolean mBound = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onStart() { super.onStart(); // 绑定到LocalService Intent intent = new Intent(this, LocalService.class); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); // 取消绑定服务 if (mBound) { unbindService(mConnection); mBound = false; } } /** Defines callbacks for service binding, passed to bindService() */ private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { // 我们已经绑定到LocalService,强制转换IBinder并获取LocalService实例 LocalBinder binder = (LocalBinder) service; mService = binder.getService(); mBound = true; } @Override public void onServiceDisconnected(ComponentName arg0) { mBound = false; } }; }