Activity端使用bindService的方式來綁定須要交互的Service,經過Service裏面的bind方法來返回IBinder,進而返回Service的實例到Activity,Activity裏面使用ServiceConnection類裏面的回調方法來接收IBinder,並轉換成Service實例。ide
public class MyService extends Service { public LocalBinder mBinder = new LocalBinder(); public class LocalBinder extends Binder { MyService getMyService() { return MyService.this; } } @Override public IBinder onBind(Intent intent) { Log.i("MyService", "service is binded"); return mBinder; } public void showTestLog(String logInfo) { Log.i("MyService", logInfo); } }
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } MyService service; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { MyService.LocalBinder binder = (MyService.LocalBinder) iBinder; service = binder.getMyService(); } @Override public void onServiceDisconnected(ComponentName componentName) { service = null; } }; @Override protected void onStart() { super.onStart(); Log.i("MyActivity", "activity start bind service"); Intent it = new Intent(MainActivity.this, MyService.class); bindService(it, serviceConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); unbindService(serviceConnection); } // 執行這個方法,會在logcat看到 'i am mainactivity' 的消息輸出,這樣就能夠調用MyService裏面的方法了 public void testBindService(View v){ if (service != null) { service.showTestLog("i am mainactivity"); }else { Log.e("MyActivity", "service is not bind"); } } }
本人技術有限,初學IPC,有錯誤請指正,謝謝!this